home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / anims.bak < prev    next >
Text File  |  1997-01-31  |  48KB  |  3,330 lines

  1. Flash:
  2. ; D0=number of a zone, D1=brightness change
  3.  
  4.  movem.l d0/a0/a1,-(a7)
  5.  
  6.  move.l #ZoneBrightTable,a1
  7.  add.w d1,(a1,d0.w*4)
  8.  add.w d1,2(a1,d0.w*4)
  9.  
  10.  move.l ZoneAdds,a0
  11.  move.l (a0,d0.w*4),a0
  12.  add.l LEVELDATA,a0
  13.  add.l #ToListOfGraph,a0
  14.  
  15. doemall:
  16.  move.w (a0),d0
  17.  blt.s doneemall
  18.  add.w d1,(a1,d0.w*4)
  19.  add.w d1,2(a1,d0.w*4)
  20.  addq #8,a0
  21.  bra.s doemall
  22.  
  23. doneemall:
  24.  movem.l (a7)+,d0/a0/a1
  25.  
  26.  rts
  27.  
  28.  
  29. ExplodeIntoBits:
  30.  move.l NastyShotData,a5
  31.  move.w #19,d1
  32. .findeight
  33.  move.w 12(a5),d0
  34.  blt.s .gotonehere
  35.  adda.w #64,a5
  36.  dbra d1,.findeight
  37.  rts
  38.  
  39. .gotonehere
  40.  
  41.  move.l ObjectPoints,a2
  42.  move.w (a5),d3
  43.  lea (a2,d3.w*8),a2
  44.  move.w newx,(a2)
  45.  move.w newz,4(a2)
  46.  jsr GetRand
  47.  and.w #8190,d0
  48.  move.l #SineTable,a2
  49.  adda.w d0,a2
  50.  move.w (a2),d3
  51.  move.w 2048(a2),d4
  52.  Jsr GetRand
  53.  and.w #3,d0
  54.  add.w #1,d0
  55.  ext.l d3
  56.  ext.l d4
  57.  asl.l d0,d3
  58.  asl.l d0,d4
  59.  move.l ImpactX(a0),d0
  60.  swap d4
  61.  asr.w #1,d0
  62.  add.w d0,d4
  63.  swap d0
  64.  move.w d4,shotzvel(a5)
  65.  swap d3
  66.  asr.w #1,d0
  67.  add.w d0,d3
  68.  move.w d3,shotxvel(a5)
  69.  jsr GetRand
  70.  and.w #1023,d0
  71.  add.w #2*128,d0
  72.  neg.w d0
  73.  move.w d0,shotyvel(a5)
  74.  move.l #0,EnemyFlags(a5)
  75.  move.w 12(a0),12(a5)
  76.  move.w 4(a0),d0
  77.  add.w #6,d0
  78.  ext.l d0
  79.  asl.l #7,d0
  80.  move.l d0,accypos(a5)
  81.  move.w d2,d0
  82.  and.w #3,d0
  83.  add.w #50,d0
  84.  move.b d0,shotsize(a5)
  85.  move.w #40,shotgrav(a5)
  86.  move.w #0,shotflags(a5)
  87.  move.w #-1,shotlife(a5)
  88.  clr.b shotstatus(a5)
  89.  move.b ObjInTop(a0),ObjInTop(a5)
  90.  st worry(a0)
  91.  adda.w #64,a5
  92.  sub.w #1,d2
  93.  blt.s .gotemall
  94.  dbra d1,.findeight
  95.  
  96. .gotemall
  97.  
  98.  rts
  99.  
  100. brightanim:
  101.  
  102.  move.l #BrightAnimTable,a1
  103.  move.l #BrightAnimPtrs,a3
  104.  move.l #BrightAnimStarts,a4
  105. dobrightanims
  106.  move.l (a3),d0
  107.  blt nomoreanims
  108.  move.l d0,a2
  109.  move.w (a2)+,d0
  110.  cmp.w #999,d0
  111.  bne.s itsabright
  112.  move.l (a4),a2
  113.  move.w (a2)+,d0
  114. itsabright:
  115.  move.l a2,(a3)+
  116.  addq #4,a4
  117.  move.w d0,(a1)+
  118.  bra.s dobrightanims
  119.  
  120. nomoreanims:
  121.  rts
  122.  
  123. BrightAnimTable: ds.w 20
  124. BrightAnimPtrs:
  125.  dc.l PulseANIM
  126.  dc.l FlickerANIM
  127.  dc.l FireFlickerANIM
  128.  dc.l -1
  129.  
  130. BrightAnimStarts:
  131.  dc.l PulseANIM
  132.  dc.l FlickerANIM
  133.  dc.l FireFlickerANIM
  134.  
  135. PulseANIM:
  136.  dc.w -10,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
  137.  dc.w 10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9
  138.  dc.w 999
  139.  
  140. FlickerANIM:
  141.  dcb.w 20,10
  142.  dc.w -10
  143.  dcb.w 30,10
  144.  dc.w -10
  145.  dcb.w 5,10
  146.  dc.w -10
  147.  dc.w 999
  148.  
  149. FireFlickerANIM:
  150.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  151.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  152.  dc.w -5,-5
  153.  dc.w 999
  154.  
  155. realtab:
  156.  dc.l prot1-78935450
  157.  dc.l prot2-78935450
  158.  dc.l prot3-78935450
  159.  dc.l prot4-78935450
  160.  dc.l prot5-78935450
  161.  dc.l prot6-78935450
  162.  dc.l prot7-78935450
  163.  dc.l prot8-78935450
  164.  dc.l prot9-78935450
  165.  dc.l protA-78935450
  166.  
  167. objvels: ds.l 8
  168.  
  169. Robotanimpos:
  170.  dc.w 0
  171. Robotarmpos
  172.  dc.w 0
  173. clump: dc.w 0
  174.  
  175. RobotWalk:
  176.  move.l #RobotPts+2,a0
  177.  move.l #Robotanim,a1
  178.  move.w Robotanimpos(pc),d0
  179.  
  180.  clr.b clump
  181.  adda.w d0,a1
  182.  
  183.  move.w #(38*3)-1,d0
  184. putinpts:
  185.  move.w (a1)+,(a0)+
  186.  dbra d0,putinpts
  187.  
  188.  
  189.  move.l #RightArm,a0
  190.  move.l #Armanim,a1
  191.  move.w Robotarmpos(pc),d0
  192.  adda.w d0,a1
  193.  move.w #(14*3)-1,d0
  194. putinpts2:
  195.  move.w (a1)+,(a0)+
  196.  dbra d0,putinpts2
  197.  
  198.  move.l #Robot_MainBody,a0
  199.  move.l #BodyPlace+2,a1
  200.  move.w (a0)+,d0
  201.  move.w RobotPts+4+14*6,d1
  202.  add.w RobotPts+4+22*6,d1
  203.  asr.w #1,d1
  204.  
  205. putinheights:
  206.  move.w (a0)+,d2
  207.  add.w d1,d2
  208.  move.w d2,(a1)
  209.  addq #6,a1
  210.  dbra d0,putinheights
  211.  
  212.  move.w visxpos,d0
  213.  add.w visxdir,d0
  214.  cmp.w #24,d0
  215.  blt.s okvisr
  216.  move.w #-4,visxdir
  217. okvisr
  218.  cmp.w #-24,d0
  219.  bgt.s okvisl
  220.  move.w #4,visxdir
  221. okvisl:
  222.  move.w d0,visxpos
  223.  
  224.  move.l #VISOR,a0
  225.  add.w #64,d0
  226.  move.b d0,6(a0)
  227.  move.b d0,18(a0)
  228.  move.b d0,22(a0)
  229.  add.b #63,d0
  230.  move.b d0,10(a0)
  231.  move.b d0,14(a0)
  232.  
  233.  rts
  234.  
  235. visxpos: dc.w 0
  236. visxdir: dc.w 4
  237.  
  238. FramesToDraw: dc.w 0
  239. TempFrames: dc.w 0
  240.  
  241. objmoveanim:
  242.  
  243.  move.l PLR1_Roompt,a0
  244.  move.w (a0),PLR1_Zone
  245.  move.l PLR2_Roompt,a0
  246.  move.w (a0),PLR2_Zone
  247.  
  248.  bsr Player1Shot
  249.  bsr Player2Shot
  250.  bsr SwitchRoutine
  251.  bsr DoorRoutine
  252.  bsr LiftRoutine
  253.  bsr ObjectHandler
  254.  bsr RobotWalk
  255.  bsr brightanim
  256.  
  257.  subq.w #1,animtimer
  258.  bgt.s notzero
  259.  move.w #2,animtimer
  260.  move.l otherrip,d0
  261.  move.l RipTear,otherrip
  262.  move.l d0,RipTear
  263. notzero:
  264.  
  265.  rts
  266.  
  267. ******************************
  268.  
  269. tstdir: dc.w 0
  270.  
  271. liftheighttab: ds.w 40
  272. doorheighttab: ds.w 40
  273. PLR1_stoodonlift: dc.b 0
  274. PLR2_stoodonlift: dc.b 0
  275. liftattop: dc.b 0
  276. liftatbot: dc.b 0
  277. ZoneBrightTable:
  278.  ds.l 300
  279.  
  280.  even
  281. LiftRoutine:
  282.  
  283.  move.l LiftData,a0
  284.  move.l #liftheighttab,a6
  285.  
  286. doalift:
  287.  
  288.  move.w (a0)+,d0    ; bottom of lift movement
  289.  cmp.w #999,d0
  290.  bne notallliftsdone
  291.  move.w #999,(a6)
  292.  rts
  293. notallliftsdone:
  294.  move.w (a0)+,d1    ; top of lift movement.
  295.  
  296.  move.w (a0),d3
  297.  move.w d3,(a6)+
  298.  move.w 2(a0),d2
  299.  move.w d2,d7
  300.  muls TempFrames,d2
  301.  add.w d2,d3
  302.  move.w 2(a0),d2
  303.  cmp.w d3,d0
  304.  sle.s liftatbot
  305.  bgt.s .nolower
  306.  moveq #0,d2
  307.  move.w d0,d3
  308. .nolower:
  309.  
  310.  cmp.w d3,d1
  311.  sge.s liftattop
  312.  blt.s .noraise
  313.  moveq #0,d2
  314.  move.w d1,d3
  315. .noraise:
  316.  
  317.  sub.w d3,d0
  318.  cmp.w #15*16,d0
  319.  slt d6
  320.  
  321.  move.w d3,(a0)+
  322.  move.l a0,a5
  323.  move.w d2,(a0)+
  324.  move.w d2,d7
  325.  
  326.  move.l (a0)+,a1
  327.  add.l LEVELGRAPHICS,a1
  328.  asr.w #2,d3
  329.  move.w d3,d0
  330.  asl.w #2,d0
  331.  move.w d0,2(a1)
  332.  move.w d3,d0
  333.  muls #256,d3
  334.  move.w (a0)+,d5
  335.  move.l ZoneAdds,a1
  336.  move.l (a1,d5.w*4),a1
  337.  add.l LEVELDATA,a1
  338.  move.w (a1),d5
  339.  move.l PLR1_Roompt,a3
  340.  move.l d3,2(a1)
  341.  neg.w d0
  342.  
  343.  cmp.w (a3),d5
  344.  seq.s PLR1_stoodonlift
  345.  move.l PLR2_Roompt,a3
  346.  cmp.w (a3),d5
  347.  seq.s PLR2_stoodonlift
  348.  
  349.  move.w (a0)+,d2    ; conditions
  350.  and.w Conditions,d2
  351.  cmp.w -2(a0),d2
  352.  beq.s .satisfied 
  353.  
  354.  move.w (a0)+,d5
  355.  
  356. .dothesimplething:
  357.  move.l FloorLines,a3
  358. .simplecheck:
  359.  move.w (a0)+,d5
  360.  blt nomoreliftwalls
  361.  asl.w #4,d5
  362.  lea (a3,d5.w),a4
  363.  move.w #0,14(a4)
  364.  move.l (a0)+,a1
  365.  add.l LEVELGRAPHICS,a1
  366.  move.l (a0)+,a2
  367.  adda.w d0,a2
  368.  move.l a2,10(a1)
  369.  move.l d3,20(a1)
  370.  bra.s .simplecheck
  371.  bra nomoreliftwalls 
  372.  
  373. .satisfied:
  374.  
  375.  move.l FloorLines,a3
  376.  moveq #0,d4
  377.  moveq #0,d5
  378.  move.b (a0)+,d4
  379.  move.b (a0)+,d5
  380.  tst.b liftattop
  381.  bne tstliftlower
  382.  tst.b liftatbot
  383.  bne tstliftraise
  384.  move.w #0,d1
  385.  
  386. backfromlift
  387.  
  388.  and.w #255,d0
  389.  
  390. liftwalls:
  391.  move.w (a0)+,d5
  392.  blt nomoreliftwalls
  393.  
  394.  asl.w #4,d5
  395.  lea (a3,d5.w),a4
  396.  move.w 14(a4),d4
  397.  move.w #$8000,14(a4)
  398.  and.w d1,d4
  399.  beq.s .nothinghit
  400.  move.w d7,(a5)
  401.  move.w #0,Noisex
  402.  move.w #0,Noisez
  403.  move.w #50,Noisevol
  404.  move.w #5,Samplenum
  405.  move.b #1,chanpick
  406.  st notifplaying
  407.  move.b #$fe,IDNUM
  408.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  409.  jsr MakeSomeNoise
  410.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  411. .nothinghit:
  412.  move.l (a0)+,a1
  413.  add.l LEVELGRAPHICS,a1
  414.  move.l (a0)+,a2
  415.  adda.w d0,a2
  416.  move.l a2,10(a1)
  417.  move.l d3,20(a1)
  418.  bra liftwalls
  419.  
  420. nomoreliftwalls 
  421.  bra doalift
  422.  
  423.  rts
  424.  
  425. tstliftlower:
  426.  cmp.b #1,d5
  427.  blt.s lift0
  428.  beq.s lift1
  429.  cmp.b #3,d5
  430.  blt.s lift2
  431.  beq.s lift3
  432.  
  433. lift0:
  434.  
  435.  moveq #0,d1
  436.  tst.b p1_spctap
  437.  beq.s .noplr1
  438.  move.w #%100000000,d1
  439.  move.w #4,d7
  440.  tst.b PLR1_stoodonlift
  441.  beq.s .noplr1
  442.  move.w #$8000,d1
  443.  bra backfromlift
  444.  
  445. .noplr1:
  446.  tst.b p2_spctap
  447.  beq.s .noplr2
  448.  or.w #%100000000000,d1
  449.  move.w #4,d7
  450.  tst.b PLR2_stoodonlift
  451.  beq.s .noplr2
  452.  move.w #$8000,d1
  453.  bra backfromlift
  454.  
  455. .noplr2:
  456.  bra backfromlift
  457.  
  458. lift1:
  459.  move.w #4,d7
  460.  tst.b PLR1_stoodonlift
  461.  bne.s lift1b
  462.  tst.b PLR2_stoodonlift
  463.  bne.s lift1b
  464.  move.w #%100100000000,d1
  465.  bra backfromlift
  466. lift1b:
  467.  move.w #$8000,d1
  468.  bra backfromlift
  469.  
  470. lift2:
  471.  move.w #$8000,d1
  472.  move.w #4,d7
  473.  bra backfromlift
  474.  
  475. lift3:
  476.  move.w #$0,d1
  477.  bra backfromlift
  478.  
  479. tstliftraise:
  480.  cmp.b #1,d4
  481.  blt.s rlift0
  482.  beq.s rlift1
  483.  cmp.b #3,d4
  484.  blt.s rlift2
  485.  beq.s rlift3
  486.  
  487. rlift0:
  488.  
  489.  moveq #0,d1
  490.  tst.b p1_spctap
  491.  beq.s .noplr1
  492.  move.w #%100000000,d1
  493.  move.w #-4,d7
  494.  tst.b PLR1_stoodonlift
  495.  beq.s .noplr1
  496.  move.w #$8000,d1
  497.  bra backfromlift
  498.  
  499. .noplr1:
  500.  tst.b p2_spctap
  501.  beq.s .noplr2
  502.  or.w #%100000000000,d1
  503.  move.w #-4,d7
  504.  tst.b PLR2_stoodonlift
  505.  beq.s .noplr2
  506.  move.w #$8000,d1
  507.  bra backfromlift
  508.  
  509. .noplr2:
  510.  
  511.  bra backfromlift
  512.  
  513. rlift1:
  514.  move.w #-4,d7
  515.  tst.b PLR1_stoodonlift
  516.  bne.s rlift1b
  517.  tst.b PLR2_stoodonlift
  518.  bne.s rlift1b
  519.  move.w #%100100000000,d1
  520.  bra backfromlift
  521. rlift1b:
  522.  move.w #$8000,d1
  523.  bra backfromlift
  524.  
  525. rlift2:
  526.  move.w #$8000,d1
  527.  move.w #-4,d7
  528.  bra backfromlift
  529.  
  530. rlift3:
  531.  move.w #$0,d1
  532.  bra backfromlift
  533.  
  534.  
  535. animtimer: dc.w 2
  536.  
  537.  
  538. doordir: dc.w -1
  539. doorpos: dc.w -9
  540. dooropen: dc.b 0
  541. doorclosed: dc.b 0 
  542.  
  543.  even 
  544. DoorRoutine:
  545.  
  546.  move.l #doorheighttab,a6
  547.  move.l DoorData,a0
  548.  
  549. doadoor:
  550.  
  551.  move.w (a0)+,d0    ; bottom of door movement
  552.  cmp.w #999,d0
  553.  bne notalldoorsdone
  554.  move.w #999,(a6)+
  555.  rts
  556. notalldoorsdone:
  557.  move.w (a0)+,d1    ; top of door movement.
  558.  
  559.  move.w (a0),d3
  560.  move.w d3,(a6)+
  561.  move.w 2(a0),d2
  562.  muls TempFrames,d2
  563.  add.w d2,d3
  564.  move.w 2(a0),d2
  565.  cmp.w d3,d0
  566.  sle.s doorclosed
  567.  bgt.s nolower
  568.  moveq #0,d2
  569. nolower:
  570.  
  571.  cmp.w d3,d1
  572.  sge.s dooropen
  573.  blt.s noraise
  574.  moveq #0,d2
  575.  move.w d1,d3
  576. noraise:
  577.  
  578.  sub.w d3,d0
  579.  cmp.w #15*16,d0
  580.  sge d6
  581.  
  582.  move.w d3,(a0)+
  583.  move.l a0,a5
  584.  move.w d2,(a0)+
  585.  move.w d2,d7
  586.  
  587.  move.l (a0)+,a1
  588.  add.l LEVELGRAPHICS,a1
  589.  asr.w #2,d3
  590.  move.w d3,d0
  591.  asl.w #2,d0
  592.  move.w d0,2(a1)
  593.  move.w d3,d0
  594.  muls #256,d3
  595.  move.l ZoneAdds,a1
  596.  move.w (a0)+,d5
  597.  
  598.  
  599.  move.l (a1,d5.w*4),a1
  600.  add.l LEVELDATA,a1
  601.  move.l d3,6(a1)
  602.  neg.w d0
  603.  and.w #255,d0
  604. ; add.w #64,d0
  605.  
  606.  cmp.w PLR1_Zone,d5
  607.  bne.s NotGoBackUp
  608.  tst.b dooropen
  609.  bne.s NotGoBackUp
  610.  tst.w d2
  611.  blt.s NotGoBackUp
  612.  move.w #-16,d7
  613.  move.w #$8000,d1
  614.  move.w (a0)+,d2
  615.  move.w (a0)+,d5
  616.  bra backfromtst
  617. NotGoBackUp:
  618.  
  619.  move.w (a0)+,d2    ; conditions
  620.  and.w Conditions,d2
  621.  
  622.  cmp.w -2(a0),d2
  623.  beq.s satisfied 
  624.  
  625.  move.w (a0)+,d5
  626.  
  627. dothesimplething:
  628.  move.l FloorLines,a3
  629. simplecheck:
  630.  move.w (a0)+,d5
  631.  blt nomoredoorwalls
  632.  asl.w #4,d5
  633.  lea (a3,d5.w),a4
  634.  move.w #0,14(a4)
  635.  move.l (a0)+,a1
  636.  add.l LEVELGRAPHICS,a1
  637.  move.l (a0)+,a2
  638.  adda.w d0,a2
  639.  move.l a2,10(a1)
  640.  move.l d3,24(a1)
  641.  bra.s simplecheck
  642.  bra nomoredoorwalls 
  643.  
  644.  
  645. satisfied:
  646.  
  647.  moveq #0,d4
  648.  moveq #0,d5
  649.  move.b (a0)+,d5
  650.  move.b (a0)+,d4
  651.  tst.b dooropen
  652.  bne tstdoortoclose
  653.  tst.b doorclosed
  654.  bne tstdoortoopen
  655.  move.w #$0,d1
  656.  
  657. backfromtst:
  658.  
  659.  move.l FloorLines,a3
  660.  
  661. doorwalls:
  662.  move.w (a0)+,d5
  663.  blt.s nomoredoorwalls
  664.  asl.w #4,d5
  665.  lea (a3,d5.w),a4
  666.  move.w 14(a4),d4
  667.  move.w #$8000,14(a4)
  668.  and.w d1,d4
  669.  beq.s nothinghit
  670.  move.w d7,(a5)
  671.  move.w #0,Noisex
  672.  move.w #0,Noisez
  673.  move.w #50,Noisevol
  674.  move.w #5,Samplenum
  675.  move.b #1,chanpick
  676.  clr.b notifplaying
  677.  move.b #$fd,IDNUM
  678.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  679.  jsr MakeSomeNoise
  680.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  681. nothinghit:
  682.  move.l (a0)+,a1
  683.  add.l LEVELGRAPHICS,a1
  684.  move.l (a0)+,a2
  685.  adda.w d0,a2
  686.  move.l a2,10(a1)
  687.  move.l d3,24(a1)
  688.  bra.s doorwalls
  689.  
  690. nomoredoorwalls 
  691.  bra doadoor
  692.  
  693.  rts
  694.  
  695. tstdoortoopen:
  696.  cmp.w #1,d5
  697.  blt.s door0
  698.  beq.s door1
  699.  cmp.w #3,d5
  700.  blt.s door2
  701.  beq.s door3
  702.  cmp.w #5,d5
  703.  blt.s door4
  704.  beq.s door5
  705.  
  706. door0:
  707.  
  708.  move.w #$0,d1
  709.  tst.b p1_spctap
  710.  beq.s .noplr1
  711.  move.w #%100000000,d1
  712. .noplr1:
  713.  tst.b p2_spctap
  714.  beq.s .noplr2
  715.  or.w #%100000000000,d1
  716. .noplr2:
  717.  move.w #-16,d7
  718.  bra backfromtst
  719.  
  720. door1:
  721.  move.w #%100100000000,d1
  722.  move.w #-16,d7
  723.  bra backfromtst
  724.  
  725. door2:
  726.  move.w #%10000000000,d1
  727.  move.w #-16,d7
  728.  bra backfromtst
  729.  
  730. door3:
  731.  move.w #%1000000000,d1
  732.  move.w #-16,d7
  733.  bra backfromtst
  734.  
  735. door4:
  736.  move.w #$8000,d1
  737.  move.w #-16,d7
  738.  bra backfromtst
  739.  
  740. door5:
  741.  move.w #$0,d1
  742.  bra backfromtst
  743.  
  744. tstdoortoclose:
  745.  tst.w d4
  746.  beq.s dclose0
  747.  bra.s dclose1
  748.  
  749. dclose0:
  750.  move.w #4,d7
  751.  move.w #$8000,d1
  752.  bra backfromtst
  753.  
  754. dclose1:
  755.  move.w #$0,d1
  756.  bra backfromtst
  757.  
  758. SwitchRoutine:
  759.  tst.b p1_spctap
  760.  bne.s SpaceIsPressed
  761.  rts
  762. SpaceIsPressed:
  763.  move.l SwitchData,a0
  764.  move.w #7,d0
  765.  move.l Points,a1
  766.  move.w PLR1_xoff,d1
  767.  move.w PLR1_zoff,d2
  768. CheckSwitches:
  769.  move.w (a0),d3
  770.  blt NotCloseEnough
  771.  move.w 2(a0),d3
  772.  lea (a1,d3.w*4),a2
  773.  move.w (a2),d3
  774.  add.w 4(a2),d3
  775.  asr.w #1,d3
  776.  move.w 2(a2),d4
  777.  add.w 6(a2),d4
  778.  asr.w #1,d4
  779.  sub.w d1,d3
  780.  muls d3,d3
  781.  sub.w d2,d4
  782.  muls d4,d4
  783.  add.l d3,d4
  784.  cmp.l #60*60,d4
  785.  bge NotCloseEnough
  786.  move.l 4(a0),a3
  787.  add.l LEVELGRAPHICS,a3
  788.  move.w 2(a3),d3
  789.  and.w #%1111000000111111,d3
  790.  not.b 8(a0)
  791.  beq.s switchoff
  792.  or.w #32*64,d3
  793. switchoff: 
  794.  move.w d3,2(a3)
  795.  move.w #7,d3
  796.  sub.w d0,d3
  797.  addq #4,d3
  798.  move.w Conditions,d4
  799.  bchg d3,d4
  800.  move.w d4,Conditions
  801.  movem.l a0/a1/d0,-(a7)
  802.  move.w #0,Noisex
  803.  move.w #0,Noisez
  804.  move.w #50,Noisevol
  805.  move.w #10,Samplenum
  806.  move.b #1,chanpick
  807.  st notifplaying
  808.  move.b #$fc,IDNUM
  809.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  810.  jsr MakeSomeNoise
  811.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  812.  
  813.  movem.l (a7)+,a0/a1/d0
  814.  
  815. NotCloseEnough:
  816.  adda.w #12,a0
  817.  dbra d0,CheckSwitches
  818.  rts
  819.  
  820. prot1: dc.w 0
  821.   
  822. tempGotBigGun: dc.w 0 
  823. tempGunDamage: dc.w 0
  824. tempGunNoise: dc.w 1
  825. tempxoff: dc.w 0
  826. tempzoff: dc.w 0
  827. tempRoompt: dc.l 0
  828.  
  829. PLR1_GotBigGun: dc.w 0
  830. PLR1_GunDamage: dc.w 0
  831. PLR1_GunNoise: dc.w 0
  832. PLR2_GotBigGun: dc.w 0
  833. PLR2_GunDamage: dc.w 0
  834. PLR2_GunNoise: dc.w 0
  835. bulyspd: dc.w 0 
  836. closedist: dc.w 0
  837.  
  838. PLR1_ObsInLine:
  839.  ds.b 400 
  840. PLR2_ObsInLine:
  841.  ds.b 400 
  842.  
  843. rotcount:
  844.  dc.w 0
  845.  
  846. shotvels: ds.l 20
  847.  
  848. PLR1_clicked: dc.b 0
  849. PLR2_clicked: dc.b 0
  850. popping: ds.l 5*4
  851. targetydiff: dc.l 0
  852. PLR1_TimeToShoot: dc.w 0
  853. PLR2_TimeToShoot: dc.w 0
  854.  
  855. Player1Shot:
  856.  
  857.  tst.w PLR1_TimeToShoot
  858.  beq.s okcanfire
  859.  
  860.  move.w TempFrames,d0
  861.  sub.w d0,PLR1_TimeToShoot
  862.  bge PLR1_nofire
  863.  move.w #0,PLR1_TimeToShoot
  864.  bra PLR1_nofire
  865.  
  866. okcanfire:
  867.  
  868.  
  869.  lea PLR1_GunData,a6
  870.  moveq #0,d0
  871.  move.b p1_gunselected,d0
  872.  move.b d0,tempgun
  873.  lsl.w #2,d0
  874.  lea (a6,d0.w*8),a6
  875.  move.w 14(a6),BulletSpd
  876.  
  877.  tst.w 12(a6)
  878.  beq.s .itsaclick
  879.  
  880.  tst.b p1_fire
  881.  beq PLR1_nofire
  882.  bra .itsahold
  883.  
  884. .itsaclick:
  885.  tst.b p1_clicked
  886.  beq PLR1_nofire
  887.  
  888. .itsahold:
  889.  
  890.  move.w PLR1_angpos,d0
  891.  move.l #SineTable,a0
  892.  lea (a0,d0.w),a0
  893.  move.w (a0),tempxdir
  894.  move.w 2048(a0),tempzdir
  895.  move.w PLR1_xoff,tempxoff
  896.  move.w PLR1_zoff,tempzoff
  897.  move.l PLR1_yoff,tempyoff
  898.  move.b PLR1_StoodInTop,tempStoodInTop
  899.  move.l PLR1_Roompt,tempRoompt
  900.  move.l #%110111000001,d7
  901.  move.w #-1,d0
  902.  move.l #0,targetydiff
  903.  move.l #$7fff,d1
  904.  
  905.  move.l ZoneAdds,a3
  906.  
  907.  move.l #PLR1_ObsInLine,a1
  908.  move.l ObjectData,a0
  909.  move.l #PLR1_ObjDists,a2
  910. findclosestinline
  911.  tst.w (a0)
  912.  blt outofline
  913.  tst.b (a1)+
  914.  beq.s notlinedup
  915.  btst #0,17(a0)
  916.  beq.s notlinedup
  917.  tst.w 12(a0)
  918.  blt.s notlinedup
  919.  move.b 16(a0),d6
  920.  btst d6,d7
  921.  beq.s notlinedup
  922.  tst.b numlives(a0)
  923.  beq.s notlinedup
  924.  move.w (a0),d5
  925.  move.w (a2,d5.w*2),d6
  926.  move.w 4(a0),d2
  927.  ext.l d2
  928.  asl.l #7,d2
  929.  sub.l PLR1_yoff,d2
  930.  move.l d2,d3
  931.  bge.s .oknotneg
  932.  neg.l d2
  933. .oknotneg:
  934.  divs #40,d2
  935.  cmp.w d6,d2
  936.  bgt.s notlinedup
  937.  
  938.  cmp.w d6,d1
  939.  blt.s notlinedup
  940.  move.w d6,d1
  941.  
  942. ; We have a closer enemy lined up.
  943.  move.l d3,targetydiff 
  944.  move.w d5,d0
  945.  
  946. notlinedup:
  947.  add.w #64,a0
  948.  bra findclosestinline
  949.  
  950. outofline:
  951.  
  952.  move.w #0,bulyspd
  953.  tst.w d0
  954.  blt nothingtoshoot
  955.  
  956.  move.l targetydiff,d5
  957.  sub.l PLR1_height,d5
  958.  add.l #18*256,d5
  959.  move.w d1,closedist
  960.  move.w BulletSpd,d2
  961.  asr.w d2,d1
  962.  tst.w d1
  963.  bgt.s okdistthing
  964.  moveq #1,d1
  965. okdistthing
  966.  divs d1,d5
  967.  move.w d5,bulyspd
  968.  
  969.  tst.b 5(a6)
  970.  beq pressedfire
  971.  
  972.  move.w (a6),d2
  973.  moveq #0,d1
  974.  move.b 2(a6),d1
  975.  cmp.w d1,d2
  976.  bge.s .okcanshoot
  977.  
  978.  move.l PLR1_Obj,a2
  979.  move.w (a2),d0
  980.  move.l #ObjRotated,a2
  981.  move.l (a2,d0.w*8),Noisex
  982.  move.w #50,Noisevol
  983.  move.b #12,Samplenum+1
  984.  clr.b notifplaying
  985.  move.b #$fb,IDNUM
  986.  jsr MakeSomeNoise
  987.  
  988.  rts
  989.  
  990. .okcanshoot:
  991.  
  992.  move.w 8(a6),PLR1_TimeToShoot
  993.  
  994.  move.b #2,PLR1_GunFrame
  995.  sub.w d1,d2
  996.  move.w d2,(a6)
  997.  
  998. ; Just blow it up.
  999.  
  1000.  move.l PlayerShotData,a0
  1001.  move.w #19,d1
  1002. .findonefree
  1003.  move.w 12(a0),d2
  1004.  blt.s .foundonefree
  1005.  adda.w #64,a0
  1006.  dbra d1,.findonefree
  1007.  
  1008.  rts
  1009.  
  1010. .foundonefree:
  1011.  
  1012.  move.l ObjectPoints,a1
  1013.  move.w (a0),d2
  1014.  move.l (a1,d0.w*8),(a1,d2.w*8)
  1015.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  1016.  move.b #1,shotstatus(a0)
  1017.  move.w #0,shotgrav(a0)
  1018.  move.b p1_gunselected,shotsize(a0)
  1019.  move.b #0,shotanim(a0)
  1020.  
  1021.  move.l ObjectData,a1
  1022.  asl.w #6,d0
  1023.  adda.w d0,a1
  1024.  move.w 4(a1),d1
  1025.  ext.l d1
  1026.  asl.l #7,d1
  1027.  move.l d1,accypos(a0)
  1028.  move.w 12(a1),12(a0)
  1029.  st worry(a0)
  1030.  move.w 4(a1),4(a0)
  1031.  
  1032.  move.b 6(a6),d0
  1033.  add.b d0,damagetaken(a1)
  1034.  
  1035.  move.l PLR1_Obj,a2
  1036.  move.w (a2),d0
  1037.  move.l #ObjRotated,a2
  1038.  move.l (a2,d0.w*8),Noisex
  1039.  move.w #50,Noisevol
  1040.  move.b 3(a6),Samplenum+1
  1041.  move.b #2,chanpick
  1042.  clr.b notifplaying
  1043.  movem.l a0/d5/d6/d7,-(a7)
  1044.  move.b #$fb,IDNUM
  1045.  jsr MakeSomeNoise
  1046.  movem.l (a7)+,a0/d5/d6/d7
  1047.  rts
  1048.  
  1049. nothingtoshoot:
  1050.  
  1051.  tst.b 5(a6)
  1052.  beq pressedfire
  1053.  
  1054.  move.w (a6),d0
  1055.  moveq #0,d1
  1056.  move.b 2(a6),d1
  1057.  cmp.w d1,d0
  1058.  bge.s .okcanshoot
  1059.  
  1060.  move.l PLR1_Obj,a2
  1061.  move.w (a2),d0
  1062.  move.l #ObjRotated,a2
  1063.  move.l (a2,d0.w*8),Noisex
  1064.  move.w #50,Noisevol
  1065.  move.b #12,Samplenum+1
  1066.  clr.b notifplaying
  1067.  move.b #$fb,IDNUM
  1068.  jsr MakeSomeNoise
  1069.  
  1070.  rts
  1071.  
  1072. .okcanshoot:
  1073.  move.w 8(a6),PLR1_TimeToShoot
  1074.  sub.w d1,d0
  1075.  move.w d0,(a6)
  1076.  move.b #2,PLR1_GunFrame
  1077.  
  1078.  move.l PLR1_Obj,a2
  1079.  move.w (a2),d0
  1080.  move.l #ObjRotated,a2
  1081.  move.l (a2,d0.w*8),Noisex
  1082.  move.w #50,Noisevol
  1083.  move.b 3(a6),Samplenum+1
  1084.  move.b #2,chanpick
  1085.  clr.b notifplaying
  1086.  movem.l a0/d5/d6/d7,-(a7)
  1087.  move.b #$fb,IDNUM
  1088.  jsr MakeSomeNoise
  1089.  movem.l (a7)+,a0/d5/d6/d7
  1090.  rts
  1091.  
  1092. PLR1_nofire:
  1093.  
  1094.  rts
  1095.  
  1096. BulletSpd: dc.w 0
  1097.  
  1098. *******************************************************
  1099.  
  1100. Player2Shot:
  1101.  
  1102.  tst.w PLR2_TimeToShoot
  1103.  beq.s okcanfire2
  1104.  
  1105.  move.w TempFrames,d0
  1106.  sub.w d0,PLR2_TimeToShoot
  1107.  bge PLR2_nofire
  1108.  move.w #0,PLR2_TimeToShoot
  1109.  bra PLR2_nofire
  1110.  
  1111. okcanfire2:
  1112.  
  1113.  lea PLR2_GunData,a6
  1114.  moveq #0,d0
  1115.  move.b p2_gunselected,d0
  1116.  move.b d0,tempgun
  1117.  lsl.w #2,d0
  1118.  lea (a6,d0.w*8),a6
  1119.  move.w 14(a6),BulletSpd
  1120.  
  1121.  tst.w 12(a6)
  1122.  beq.s .itsaclick
  1123.  
  1124.  tst.b p2_fire
  1125.  beq PLR2_nofire
  1126.  bra .itsahold
  1127.  
  1128. .itsaclick:
  1129.  tst.b p2_clicked
  1130.  beq PLR2_nofire
  1131.  
  1132. .itsahold:
  1133.  
  1134.  move.w PLR2_angpos,d0
  1135.  move.l #SineTable,a0
  1136.  lea (a0,d0.w),a0
  1137.  move.w (a0),tempxdir
  1138.  move.w 2048(a0),tempzdir
  1139.  move.w PLR2_xoff,tempxoff
  1140.  move.w PLR2_zoff,tempzoff
  1141.  move.l PLR2_yoff,tempyoff
  1142.  move.b PLR2_StoodInTop,tempStoodInTop
  1143.  move.l PLR2_Roompt,tempRoompt
  1144.  move.l #%010111100001,d7
  1145.  move.w #-1,d0
  1146.  move.l #0,targetydiff
  1147.  move.l #$7fff,d1
  1148.  
  1149.  move.l ZoneAdds,a3
  1150.  
  1151.  move.l #PLR2_ObsInLine,a1
  1152.  move.l ObjectData,a0
  1153.  move.l #PLR2_ObjDists,a2
  1154. findclosestinline2
  1155.  tst.w (a0)
  1156.  blt outofline2
  1157.  tst.b (a1)+
  1158.  beq.s notlinedup2
  1159.  btst #1,17(a0)
  1160.  beq.s notlinedup2
  1161.  tst.w 12(a0)
  1162.  blt.s notlinedup2
  1163.  move.b 16(a0),d6
  1164.  btst d6,d7
  1165.  beq.s notlinedup2
  1166.  tst.b numlives(a0)
  1167.  beq.s notlinedup2
  1168.  move.w (a0),d5
  1169.  move.w (a2,d5.w*2),d6
  1170.  move.w 4(a0),d2
  1171.  ext.l d2
  1172.  asl.l #7,d2
  1173.  sub.l PLR2_yoff,d2
  1174.  move.l d2,d3
  1175.  bge.s .oknotneg
  1176.  neg.l d2
  1177. .oknotneg:
  1178.  divs #40,d2
  1179.  cmp.w d6,d2
  1180.  bgt.s notlinedup2
  1181.  
  1182.  cmp.w d6,d1
  1183.  blt.s notlinedup2
  1184.  move.w d6,d1
  1185.  
  1186. ; We have a closer enemy lined up.
  1187.  move.l d3,targetydiff 
  1188.  move.w d5,d0
  1189.  
  1190. notlinedup2:
  1191.  add.w #64,a0
  1192.  bra findclosestinline2
  1193.  
  1194. outofline2:
  1195.  
  1196.  move.w #0,bulyspd
  1197.  tst.w d0
  1198.  blt nothingtoshoot2
  1199.  
  1200.  move.l targetydiff,d5
  1201.  sub.l PLR2_height,d5
  1202.  add.l #18*256,d5
  1203.  move.w d1,closedist
  1204.  
  1205.  move.w BulletSpd,d2
  1206.  asr.w d2,d1
  1207.  tst.w d1
  1208.  bgt.s okdistthing2
  1209.  moveq #1,d1
  1210. okdistthing2
  1211.  divs d1,d5
  1212.  move.w d5,bulyspd
  1213.  
  1214.  tst.b 5(a6)
  1215.  beq pressedfire2
  1216.  
  1217.  move.w (a6),d2
  1218.  moveq #0,d1
  1219.  move.b 2(a6),d1
  1220.  cmp.w d1,d2
  1221.  bge.s .okcanshoot
  1222.  
  1223.  move.l PLR2_Obj,a2
  1224.  move.w (a2),d0
  1225.  move.l #ObjRotated,a2
  1226.  move.l (a2,d0.w*8),Noisex
  1227.  move.w #50,Noisevol
  1228.  move.b #12,Samplenum+1
  1229.  clr.b notifplaying
  1230.  move.b #$fb,IDNUM
  1231.  jsr MakeSomeNoise
  1232.  
  1233.  rts
  1234.  
  1235. .okcanshoot:
  1236.  
  1237.  move.w 8(a6),PLR2_TimeToShoot
  1238.  
  1239.  move.b #2,PLR2_GunFrame
  1240.  sub.w d1,d2
  1241.  move.w d2,(a6)
  1242.  
  1243. ; Just blow it up.
  1244.  
  1245.  move.l PlayerShotData,a0
  1246.  move.w #19,d1
  1247. .findonefree
  1248.  move.w 12(a0),d2
  1249.  blt.s .foundonefree
  1250.  adda.w #64,a0
  1251.  dbra d1,.findonefree
  1252.  
  1253.  rts
  1254.  
  1255. .foundonefree:
  1256.  
  1257.  move.l ObjectPoints,a1
  1258.  move.w (a0),d2
  1259.  move.l (a1,d0.w*8),(a1,d2.w*8)
  1260.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  1261.  move.b #1,shotstatus(a0)
  1262.  move.w #0,shotgrav(a0)
  1263.  move.b p2_gunselected,shotsize(a0)
  1264.  move.b #0,shotanim(a0)
  1265.  
  1266.  move.l ObjectData,a1
  1267.  asl.w #6,d0
  1268.  adda.w d0,a1
  1269.  move.w 4(a1),d1
  1270.  ext.l d1
  1271.  asl.l #7,d1
  1272.  move.l d1,accypos(a0)
  1273.  move.w 12(a1),12(a0)
  1274.  st worry(a0)
  1275.  move.w 4(a1),4(a0)
  1276.  
  1277.  move.b 6(a6),d0
  1278.  add.b d0,damagetaken(a1)
  1279.  
  1280.  move.l PLR2_Obj,a2
  1281.  move.w (a2),d0
  1282.  move.l #ObjRotated,a2
  1283.  move.l (a2,d0.w*8),Noisex
  1284.  move.w #50,Noisevol
  1285.  move.b 3(a6),Samplenum+1
  1286.  move.b #2,chanpick
  1287.  clr.b notifplaying
  1288.  movem.l a0/d5/d6/d7,-(a7)
  1289.  move.b #$fb,IDNUM
  1290.  jsr MakeSomeNoise
  1291.  movem.l (a7)+,a0/d5/d6/d7
  1292.  rts
  1293.  
  1294. nothingtoshoot2:
  1295.  
  1296.  tst.b 5(a6)
  1297.  beq pressedfire2
  1298.  
  1299.  move.w (a6),d0
  1300.  moveq #0,d1
  1301.  move.b 2(a6),d1
  1302.  cmp.w d1,d0
  1303.  bge.s .okcanshoot
  1304.  
  1305.  move.l PLR2_Obj,a2
  1306.  move.w (a2),d0
  1307.  move.l #ObjRotated,a2
  1308.  move.l (a2,d0.w*8),Noisex
  1309.  move.w #50,Noisevol
  1310.  move.b #12,Samplenum+1
  1311.  clr.b notifplaying
  1312.  move.b #$fb,IDNUM
  1313.  jsr MakeSomeNoise
  1314.  
  1315.  rts
  1316.  
  1317. .okcanshoot:
  1318.  move.w 8(a6),PLR2_TimeToShoot
  1319.  sub.w d1,d0
  1320.  move.w d0,(a6)
  1321.  move.b #2,PLR2_GunFrame
  1322.  
  1323.  move.l PLR2_Obj,a2
  1324.  move.w (a2),d0
  1325.  move.l #ObjRotated,a2
  1326.  move.l (a2,d0.w*8),Noisex
  1327.  move.w #50,Noisevol
  1328.  move.b 3(a6),Samplenum+1
  1329.  move.b #2,chanpick
  1330.  clr.b notifplaying
  1331.  movem.l a0/d5/d6/d7,-(a7)
  1332.  move.b #$fb,IDNUM
  1333.  jsr MakeSomeNoise
  1334.  movem.l (a7)+,a0/d5/d6/d7
  1335.  rts
  1336.  
  1337. PLR2_nofire:
  1338.  
  1339.  
  1340.  rts
  1341.  
  1342. tempyoff: dc.l 0
  1343. tempStoodInTop: dc.w 0
  1344. tempangpos: dc.w 0
  1345. tempxdir: dc.w 0
  1346. tempzdir: dc.w 0
  1347. tempgun: dc.w 0
  1348. tstfire: dc.w 0
  1349. pressedfire:
  1350.  
  1351.  move.w #256,d6
  1352.  move.w #256,d5
  1353.  
  1354.  move.w (a6),d0
  1355.  moveq #0,d1
  1356.  move.b 2(a6),d1
  1357.  cmp.w d1,d0
  1358.  bge.s okcanshoot
  1359.  
  1360.  move.l PLR1_Obj,a2
  1361.  move.w (a2),d0
  1362.  move.l #ObjRotated,a2
  1363.  move.l (a2,d0.w*8),Noisex
  1364.  move.w #50,Noisevol
  1365.  move.b #12,Samplenum+1
  1366.  clr.b notifplaying
  1367.  move.b #$fb,IDNUM
  1368.  jsr MakeSomeNoise
  1369.  
  1370.  rts
  1371.  
  1372. okcanshoot:
  1373.  move.w 8(a6),PLR1_TimeToShoot
  1374.  sub.w d1,d0
  1375.  move.w d0,(a6)
  1376.  move.b #2,PLR1_GunFrame
  1377.  move.l PLR1_Obj,a2
  1378.  bra firefive
  1379.  
  1380. pressedfire2:
  1381.  
  1382.  move.w #256,d6
  1383.  move.w #256,d5
  1384.  
  1385.  move.w (a6),d0
  1386.  moveq #0,d1
  1387.  move.b 2(a6),d1
  1388.  cmp.w d1,d0
  1389.  bge.s okcanshoot2
  1390.  
  1391.  move.l PLR2_Obj,a2
  1392.  move.w (a2),d0
  1393.  move.l #ObjRotated,a2
  1394.  move.l (a2,d0.w*8),Noisex 
  1395.  move.w #50,Noisevol
  1396.  move.b #12,Samplenum+1
  1397.  clr.b notifplaying
  1398.  move.b #$fb,IDNUM
  1399.  jsr MakeSomeNoise
  1400.  
  1401.  rts
  1402.  
  1403. okcanshoot2:
  1404.  move.w 8(a6),PLR2_TimeToShoot
  1405.  sub.w d1,d0
  1406.  move.w d0,(a6)
  1407.  move.b #2,PLR2_GunFrame
  1408.  move.l PLR2_Obj,a2
  1409.  
  1410. firefive:
  1411.  
  1412.  move.l PlayerShotData,a0
  1413.  move.w #19,d1
  1414. .findonefree
  1415.  move.w 12(a0),d0
  1416.  blt.s .foundonefree
  1417.  adda.w #64,a0
  1418.  dbra d1,.findonefree
  1419.  
  1420.  rts
  1421.  
  1422. .foundonefree:
  1423.  
  1424.  move.w 16(a6),shotgrav(a0)
  1425.  move.w 18(a6),shotflags(a0)
  1426.  move.w 20(a6),d0
  1427.  add.w d0,bulyspd
  1428.  
  1429.  move.w (a2),d0
  1430.  move.l #ObjRotated,a2
  1431.  move.l (a2,d0.w*8),Noisex
  1432.  move.w #50,Noisevol
  1433.  move.b 3(a6),Samplenum+1
  1434.  move.b #2,chanpick
  1435.  clr.b notifplaying
  1436.  move.b tempgun,shotsize(a0)
  1437.  move.b 6(a6),shotpower(a0)
  1438.  movem.l a0/d5/d6/d7,-(a7)
  1439.  move.b #$fb,IDNUM
  1440.  jsr MakeSomeNoise
  1441.  movem.l (a7)+,a0/d5/d6/d7
  1442.  
  1443.  move.l ObjectPoints,a1
  1444.  move.w (a0),d1
  1445.  lea (a1,d1.w*8),a1
  1446.  move.w tempxoff,(a1)
  1447.  move.w tempzoff,4(a1)
  1448.  move.w tempxdir,d0
  1449.  ext.l d0
  1450.  
  1451.  move.w BulletSpd,d1
  1452.  asl.l d1,d0
  1453.  move.l d0,shotxvel(a0)
  1454.  move.w tempzdir,d0
  1455.  ext.l d0
  1456.  asl.l d1,d0
  1457.  move.l d0,shotzvel(a0)
  1458.  move.w bulyspd,shotyvel(a0)
  1459.  move.b tempStoodInTop,ObjInTop(a0)
  1460.  move.w #0,shotlife(a0)
  1461.  move.l d7,EnemyFlags(a0)
  1462.  move.l tempRoompt,a2
  1463.  move.w (a2),12(a0)
  1464.  move.l tempyoff,d0
  1465.  add.l #20*128,d0
  1466.  move.l d0,accypos(a0)
  1467.  st worry(a0)
  1468.  asr.l #7,d0
  1469.  move.w d0,4(a0)
  1470.  
  1471.  add.w d6,tempangpos
  1472.  neg.w d6
  1473.  neg.w d5
  1474.  add.w d5,d6
  1475.  
  1476.  rts
  1477.  
  1478. PLR1_GunFrame: dc.w 0
  1479. PLR2_GunFrame: dc.w 0
  1480.  
  1481. duh: dc.w 0
  1482. double: dc.w 0
  1483. ivescreamed: dc.w 0
  1484.  
  1485. ObjectHandler:
  1486.  
  1487.  move.l ObjectData,a0
  1488. Objectloop:
  1489.  tst.w (a0)
  1490.  blt doneallobj
  1491.  tst.b worry(a0)
  1492.  beq.s dontworryyourprettyhead
  1493.  
  1494.  cmp.b #0,16(a0)
  1495.  bne.s notnasty
  1496.  bsr ItsANasty
  1497. notnasty:
  1498.  cmp.b #1,16(a0)
  1499.  bne.s notmedi
  1500.  bsr ItsAMediKit
  1501. notmedi:
  1502.  cmp.b #2,16(a0)
  1503.  bne.s notbullet
  1504.  bsr ItsABullet
  1505. notbullet:
  1506.  cmp.b #3,16(a0)
  1507.  bne.s notbiggun
  1508.  bsr ItsABigGun
  1509. notbiggun:
  1510.  cmp.b #4,16(a0)
  1511.  bne.s notkey
  1512.  bsr ItsAKey
  1513. notkey:
  1514.  
  1515. ; FIVE IS PLAYER 1
  1516.  
  1517.  cmp.b #6,16(a0)
  1518.  bne.s notRobot
  1519.  bsr ItsARobot
  1520. notRobot:
  1521.  cmp.b #7,16(a0)
  1522.  bne.s notBigNasty
  1523.  bsr ItsABigNasty
  1524. notBigNasty:
  1525.  cmp.b #8,16(a0)
  1526.  bne.s notFlyingNasty
  1527.  bsr ItsAFlyingNasty
  1528. notFlyingNasty:
  1529.  cmp.b #9,16(a0)
  1530.  bne.s notAmmoClip
  1531.  bsr ItsAnAmmoClip
  1532. notAmmoClip
  1533.  cmp.b #10,16(a0)
  1534.  bne.s notBarrel
  1535.  bsr ItsABarrel
  1536. notBarrel
  1537.  
  1538. ; ELEVEN IS PLAYER 2
  1539.  
  1540. dontworryyourprettyhead:
  1541.  adda.w #64,a0
  1542.  bra Objectloop
  1543.  
  1544. doneallobj:
  1545.  rts
  1546.  
  1547.  include "ab3:source/AI.s"
  1548.  
  1549. ItsABarrel:
  1550.  
  1551.  clr.b worry(a0)
  1552.  
  1553.  cmp.w #8,8(a0)
  1554.  bne.s notexploding
  1555.  
  1556.  add.w #$404,6(a0)
  1557.  
  1558.  move.w 10(a0),d0
  1559.  add.w #1,d0
  1560.  cmp.w #12+8,d0
  1561.  bne.s .notdone
  1562.  
  1563.  move.w #-1,12(a0)
  1564.  rts
  1565.  
  1566. .notdone:
  1567.  move.w d0,10(a0)
  1568.  rts
  1569.  
  1570. notexploding:
  1571.  
  1572.  move.w 12(a0),d0
  1573.  move.l ZoneAdds,a1
  1574.  move.l (a1,d0.w*4),a1
  1575.  add.l LEVELDATA,a1
  1576.  move.l ToZoneFloor(a1),d0
  1577.  tst.b ObjInTop(a0)
  1578.  beq.s .okinbot
  1579.  move.l ToUpperFloor(a1),d0
  1580. .okinbot:
  1581.  asr.l #7,d0
  1582.  sub.w #32,d0
  1583.  move.w d0,4(a0)
  1584.  
  1585.  moveq #0,d2
  1586.  move.b damagetaken(a0),d2
  1587.  beq.s nodamage
  1588.  move.b #0,damagetaken(a0)
  1589.  sub.b d2,numlives(a0)
  1590.  bgt.s nodamage
  1591.  move.b #0,numlives(a0)
  1592.  
  1593.  movem.l d0-d7/a0-a6,-(a7)
  1594.  
  1595.  move.w (a0),d0
  1596.  move.l ObjectPoints,a1
  1597.  move.w (a1,d0.w*8),Viewerx
  1598.  move.w 4(a1,d0.w*8),Viewerz
  1599.  move.w #200,d0
  1600.  jsr ComputeBlast
  1601.  
  1602.  move.w (a0),d0
  1603.  move.l #ObjRotated,a1
  1604.  move.l (a1,d0.w*8),Noisex
  1605.  move.w #300,Noisevol
  1606.  move.w #15,Samplenum
  1607.  jsr MakeSomeNoise
  1608.  
  1609.  movem.l (a7)+,d0-d7/a0-a6
  1610.  move.w #8,8(a0)
  1611.  move.w #8,10(a0)
  1612.  move.w #$1010,14(a0)
  1613.  move.w #-30,2(a0)
  1614.  
  1615.  rts
  1616.  
  1617. nodamage:
  1618.  
  1619.  move.w (a0),d0
  1620.  move.l ObjectPoints,a1
  1621.  move.w (a1,d0.w*8),Viewerx
  1622.  move.w 4(a1,d0.w*8),Viewerz
  1623.  move.b ObjInTop(a0),ViewerTop
  1624.  move.b PLR1_StoodInTop,TargetTop
  1625.  move.l PLR1_Roompt,ToRoom
  1626.  
  1627.  move.w 12(a0),d0
  1628.  move.l ZoneAdds,a1
  1629.  move.l (a1,d0.w*4),a1
  1630.  add.l LEVELDATA,a1
  1631.  move.l a1,FromRoom
  1632.   
  1633.  move.w PLR1_xoff,Targetx
  1634.  move.w PLR1_zoff,Targetz
  1635.  move.l PLR1_yoff,d0
  1636.  asr.l #7,d0
  1637.  move.w d0,Targety
  1638.  move.w 4(a0),Viewery
  1639.  jsr CanItBeSeen
  1640.  
  1641.  clr.b 17(a0)
  1642.  tst.b CanSee
  1643.  beq .noseeplr1
  1644.  move.b #1,17(a0)
  1645.  
  1646. .noseeplr1:
  1647.  
  1648.  rts
  1649.  
  1650. ItsAMarine:
  1651.  
  1652.  move.w #15,Aggression
  1653.  move.w #0,Movement
  1654.  move.w #30,Cooperation
  1655.  move.b #0,Ident
  1656.  move.l #%1,enemies
  1657.  move.l #%10100000,friends
  1658.  st Armed
  1659.  bsr AIControl
  1660.  
  1661.  move.l objroom,a2
  1662.  move.w 10(a2),2(a0)
  1663.  move.l 2(a2),d0
  1664.  sub.l #6400,d0
  1665.  asr.l #7,d0
  1666.  move.w d0,4(a0)
  1667.  
  1668.  move.l #0,8(a0)
  1669.  
  1670.  rts
  1671.  
  1672.  include "ab3:source/aliencontrol.s"
  1673.  
  1674. nextCPt: dc.w 0
  1675.  
  1676. RipTear: dc.l 256*17*65536
  1677. otherrip: dc.l 256*18*65536
  1678.  
  1679. ItsAMediKit:
  1680.  
  1681.  clr.b worry(a0)
  1682.  
  1683. HealFactor EQU 18
  1684.  move.b PLR1_StoodInTop,d0
  1685.  move.b ObjInTop(a0),d1
  1686.  eor.b d1,d0
  1687.  bne .NotSameZone
  1688.  
  1689.  move.w PLR1_xoff,oldx
  1690.  move.w PLR1_zoff,oldz
  1691.  move.w PLR1_Zone,d7
  1692.  move.w 12(a0),d0
  1693.  move.l ZoneAdds,a1
  1694.  move.l (a1,d0.w*4),a1
  1695.  add.l LEVELDATA,a1
  1696.  move.l ToZoneFloor(a1),d0
  1697.  tst.b ObjInTop(a0)
  1698.  beq.s .okinbot
  1699.  move.l ToUpperFloor(a1),d0
  1700. .okinbot:
  1701.   asr.l #7,d0
  1702.  sub.w #16,d0
  1703.  move.w d0,4(a0)
  1704.  
  1705.  cmp.w 12(a0),d7
  1706.  bne .NotSameZone
  1707.  move.w (a0),d0
  1708.  move.l ObjectPoints,a1
  1709.  move.w (a1,d0.w*8),newx
  1710.  move.w 4(a1,d0.w*8),newz
  1711.  move.l #100*100,d2
  1712.  bsr CheckHit
  1713.  tst.b hitwall
  1714.  beq.s .NotPickedUp
  1715.  
  1716.  move.l PLR1_Obj,a2
  1717.  move.w (a2),d0
  1718.  move.l #ObjRotated,a2
  1719.  move.l (a2,d0.w*8),Noisex
  1720.  move.w #50,Noisevol
  1721.  move.w #4,Samplenum
  1722.  move.b #2,chanpick
  1723.  clr.b notifplaying
  1724.  move.b 1(a0),IDNUM
  1725.  movem.l a0/a1/d2/d6/d7,-(a7)
  1726.  jsr MakeSomeNoise
  1727.  movem.l (a7)+,a0/a1/d2/d6/d7
  1728.  
  1729.  move.w #-1,12(a0)
  1730.  move.w HealFactor(a0),d0
  1731.  add.w d0,PLR1_energy
  1732.  
  1733. .NotPickedUp:
  1734.  
  1735. .NotSameZone:
  1736.  
  1737. MEDIPLR2
  1738.  
  1739.  move.b PLR2_StoodInTop,d0
  1740.  move.b ObjInTop(a0),d1
  1741.  eor.b d1,d0
  1742.  bne .NotSameZone
  1743.  
  1744.  move.w PLR2_xoff,oldx
  1745.  move.w PLR2_zoff,oldz
  1746.  move.w PLR2_Zone,d7
  1747.  move.w 12(a0),d0
  1748.  move.l ZoneAdds,a1
  1749.  move.l (a1,d0.w*4),a1
  1750.  add.l LEVELDATA,a1
  1751.  move.l ToZoneFloor(a1),d0
  1752.  tst.b ObjInTop(a0)
  1753.  beq.s .okinbot
  1754.  move.l ToUpperFloor(a1),d0
  1755. .okinbot:
  1756.   asr.l #7,d0
  1757.  sub.w #16,d0
  1758.  move.w d0,4(a0)
  1759.  
  1760.  cmp.w 12(a0),d7
  1761.  bne .NotSameZone
  1762.  move.w (a0),d0
  1763.  move.l ObjectPoints,a1
  1764.  move.w (a1,d0.w*8),newx
  1765.  move.w 4(a1,d0.w*8),newz
  1766.  move.l #100*100,d2
  1767.  bsr CheckHit
  1768.  tst.b hitwall
  1769.  beq.s .NotPickedUp
  1770.  
  1771.  move.l PLR2_Obj,a2
  1772.  move.w (a2),d0
  1773.  move.l #ObjRotated,a2
  1774.  move.l (a2,d0.w*8),Noisex
  1775.  move.w #50,Noisevol
  1776.  move.w #4,Samplenum
  1777.  move.b #2,chanpick
  1778.  clr.b notifplaying
  1779.  move.b 1(a0),IDNUM
  1780.  movem.l a0/a1/d2/d6/d7,-(a7)
  1781.  jsr MakeSomeNoise
  1782.  movem.l (a7)+,a0/a1/d2/d6/d7
  1783.  
  1784.  move.w #-1,12(a0)
  1785.  move.w HealFactor(a0),d0
  1786.  add.w d0,PLR2_energy
  1787.  
  1788. .NotPickedUp:
  1789.  
  1790. .NotSameZone:
  1791.  
  1792.  
  1793.  rts
  1794.  
  1795. ItsAnAmmoClip:
  1796.  
  1797.  clr.b worry(a0)
  1798.  
  1799. AmmoType EQU 18
  1800.  move.b PLR1_StoodInTop,d0
  1801.  move.b ObjInTop(a0),d1
  1802.  eor.b d1,d0
  1803.  bne .NotSameZone
  1804.  move.w PLR1_xoff,oldx
  1805.  move.w PLR1_zoff,oldz
  1806.  move.w PLR1_Zone,d7
  1807.  move.w 12(a0),d0
  1808.  move.l ZoneAdds,a1
  1809.  move.l (a1,d0.w*4),a1
  1810.  add.l LEVELDATA,a1
  1811.  move.l ToZoneFloor(a1),d0
  1812.  tst.b ObjInTop(a0)
  1813.  beq.s .okinbot
  1814.  move.l ToUpperFloor(a1),d0
  1815. .okinbot:
  1816.   asr.l #7,d0
  1817.  sub.w #16,d0
  1818.  move.w d0,4(a0)
  1819.  
  1820.  cmp.w 12(a0),d7
  1821.  bne .NotSameZone
  1822.  move.w (a0),d0
  1823.  move.l ObjectPoints,a1
  1824.  move.w (a1,d0.w*8),newx
  1825.  move.w 4(a1,d0.w*8),newz
  1826.  move.l #100*100,d2
  1827.  bsr CheckHit
  1828.  tst.b hitwall
  1829.  beq.s .NotPickedUp
  1830.  
  1831.  move.l PLR1_Obj,a2
  1832.  move.w (a2),d0
  1833.  move.l #ObjRotated,a2
  1834.  move.l (a2,d0.w*8),Noisex
  1835.  move.w #50,Noisevol
  1836.  move.w #11,Samplenum
  1837.  clr.b notifplaying
  1838.  move.b 1(a0),IDNUM
  1839.  movem.l a0/a1/d2/d6/d7,-(a7)
  1840.  jsr MakeSomeNoise
  1841.  movem.l (a7)+,a0/a1/d2/d6/d7
  1842.  
  1843.  move.w #-1,12(a0)
  1844.  move.w AmmoType(a0),d0
  1845.  lea PLR1_GunData,a6
  1846.  lsl.w #2,d0
  1847.  lea (a6,d0.w*8),a6
  1848.  moveq #0,d0
  1849.  move.b 4(a6),d0
  1850.  asl.w #3,d0
  1851.  move.w (a6),d1
  1852.  add.w d0,d1
  1853.  move.w d1,(a6)
  1854.  
  1855. .NotPickedUp:
  1856.  
  1857. .NotSameZone:
  1858.  
  1859. AMMOPLR2:
  1860.  
  1861.  move.b PLR2_StoodInTop,d0
  1862.  move.b ObjInTop(a0),d1
  1863.  eor.b d1,d0
  1864.  bne .NotSameZone
  1865.  move.w PLR2_xoff,oldx
  1866.  move.w PLR2_zoff,oldz
  1867.  move.w PLR2_Zone,d7
  1868.  move.w 12(a0),d0
  1869.  move.l ZoneAdds,a1
  1870.  move.l (a1,d0.w*4),a1
  1871.  add.l LEVELDATA,a1
  1872.  move.l ToZoneFloor(a1),d0
  1873.  tst.b ObjInTop(a0)
  1874.  beq.s .okinbot
  1875.  move.l ToUpperFloor(a1),d0
  1876. .okinbot:
  1877.   asr.l #7,d0
  1878.  sub.w #16,d0
  1879.  move.w d0,4(a0)
  1880.  
  1881.  cmp.w 12(a0),d7
  1882.  bne .NotSameZone
  1883.  move.w (a0),d0
  1884.  move.l ObjectPoints,a1
  1885.  move.w (a1,d0.w*8),newx
  1886.  move.w 4(a1,d0.w*8),newz
  1887.  move.l #100*100,d2
  1888.  bsr CheckHit
  1889.  tst.b hitwall
  1890.  beq.s .NotPickedUp
  1891.  
  1892.  move.l PLR2_Obj,a2
  1893.  move.w (a2),d0
  1894.  move.l #ObjRotated,a2
  1895.  move.l (a2,d0.w*8),Noisex
  1896.  move.w #50,Noisevol
  1897.  move.w #11,Samplenum
  1898.  clr.b notifplaying
  1899.  move.b 1(a0),IDNUM
  1900.  movem.l a0/a1/d2/d6/d7,-(a7)
  1901.  jsr MakeSomeNoise
  1902.  movem.l (a7)+,a0/a1/d2/d6/d7
  1903.  
  1904.  move.w #-1,12(a0)
  1905.  move.w AmmoType(a0),d0
  1906.  lea PLR2_GunData,a6
  1907.  lsl.w #2,d0
  1908.  lea (a6,d0.w*8),a6
  1909.  moveq #0,d0
  1910.  move.b 4(a6),d0
  1911.  asl.w #3,d0
  1912.  move.w (a6),d1
  1913.  add.w d0,d1
  1914.  move.w d1,(a6)
  1915.  
  1916. .NotPickedUp:
  1917.  
  1918. .NotSameZone:
  1919.  
  1920.  
  1921.  rts
  1922.  
  1923.  
  1924. ItsABigGun:
  1925.  
  1926.  clr.b worry(a0)
  1927.  
  1928.  move.b PLR1_StoodInTop,d0
  1929.  move.b ObjInTop(a0),d1
  1930.  eor.b d1,d0
  1931.  bne .NotSameZone
  1932.  move.w PLR1_xoff,oldx
  1933.  move.w PLR1_zoff,oldz
  1934.  move.w PLR1_Zone,d7
  1935.  move.w 12(a0),d0
  1936.  move.l ZoneAdds,a1
  1937.  move.l (a1,d0.w*4),a1
  1938.  add.l LEVELDATA,a1
  1939.  move.l ToZoneFloor(a1),d0
  1940.  tst.b ObjInTop(a0)
  1941.  beq.s .okinbot
  1942.  move.l ToUpperFloor(a1),d0
  1943. .okinbot:
  1944.   asr.l #7,d0
  1945. ; add.w #16,d0
  1946.  moveq #0,d1
  1947.  move.b 7(a0),d1
  1948.  sub.w d1,d0
  1949.  
  1950.  move.w d0,4(a0)
  1951.  cmp.w 12(a0),d7
  1952.  bne .NotSameZone
  1953.  move.w (a0),d0
  1954.  move.l ObjectPoints,a1
  1955.  move.w (a1,d0.w*8),newx
  1956.  move.w 4(a1,d0.w*8),newz
  1957.  move.l #100*100,d2
  1958.  bsr CheckHit
  1959.  tst.b hitwall
  1960.  beq.s .NotPickedUp
  1961.  
  1962.  move.l PLR1_Obj,a2
  1963.  move.w (a2),d0
  1964.  move.l #ObjRotated,a2
  1965.  move.l (a2,d0.w*8),Noisex
  1966.  move.w #50,Noisevol
  1967.  move.w #4,Samplenum
  1968.  move.b #2,chanpick
  1969.  clr.b notifplaying
  1970.  move.b 1(a0),IDNUM
  1971.  movem.l a0/a1/d2/d6/d7,-(a7)
  1972.  jsr MakeSomeNoise
  1973.  movem.l (a7)+,a0/a1/d2/d6/d7
  1974.  
  1975.  move.l #Cheese,FacesPtr
  1976.  move.w #4,Cheese
  1977.  move.w #-1,FacesCounter
  1978.  moveq #0,d0
  1979.  move.b 17(a0),d0
  1980.  lsl.w #2,d0
  1981.  move.l #PLR1_GunData+32,a1
  1982.  st 7(a1,d0.w*8)
  1983.  
  1984.  move.w #-1,12(a0)
  1985.  
  1986. .NotPickedUp:
  1987.  
  1988. .NotSameZone:
  1989.  
  1990. GUNPLR2:
  1991.  
  1992.  move.b PLR2_StoodInTop,d0
  1993.  move.b ObjInTop(a0),d1
  1994.  eor.b d1,d0
  1995.  bne .NotSameZone
  1996.  move.w PLR2_xoff,oldx
  1997.  move.w PLR2_zoff,oldz
  1998.  move.w PLR2_Zone,d7
  1999.  move.w 12(a0),d0
  2000.  move.l ZoneAdds,a1
  2001.  move.l (a1,d0.w*4),a1
  2002.  add.l LEVELDATA,a1
  2003.  move.l ToZoneFloor(a1),d0
  2004.  tst.b ObjInTop(a0)
  2005.  beq.s .okinbot
  2006.  move.l ToUpperFloor(a1),d0
  2007. .okinbot:
  2008.   asr.l #7,d0
  2009. ; add.w #16,d0
  2010.  moveq #0,d1
  2011.  move.b 7(a0),d1
  2012.  sub.w d1,d0
  2013.  
  2014.  move.w d0,4(a0)
  2015.  cmp.w 12(a0),d7
  2016.  bne .NotSameZone
  2017.  move.w (a0),d0
  2018.  move.l ObjectPoints,a1
  2019.  move.w (a1,d0.w*8),newx
  2020.  move.w 4(a1,d0.w*8),newz
  2021.  move.l #100*100,d2
  2022.  bsr CheckHit
  2023.  tst.b hitwall
  2024.  beq.s .NotPickedUp
  2025.  
  2026.  move.l PLR2_Obj,a2
  2027.  move.w (a2),d0
  2028.  move.l #ObjRotated,a2
  2029.  move.l (a2,d0.w*8),Noisex
  2030.  move.w #50,Noisevol
  2031.  move.w #4,Samplenum
  2032.  move.b #2,chanpick
  2033.  clr.b notifplaying
  2034.  move.b 1(a0),IDNUM
  2035.  movem.l a0/a1/d2/d6/d7,-(a7)
  2036.  jsr MakeSomeNoise
  2037.  movem.l (a7)+,a0/a1/d2/d6/d7
  2038.  
  2039.  move.l #Cheese,FacesPtr
  2040.  move.w #4,Cheese
  2041.  move.w #-1,FacesCounter
  2042.  moveq #0,d0
  2043.  move.b 17(a0),d0
  2044.  lsl.w #2,d0
  2045.  move.l #PLR2_GunData+32,a1
  2046.  st 7(a1,d0.w*8)
  2047.  
  2048.  move.w #-1,12(a0)
  2049.  
  2050. .NotPickedUp:
  2051.  
  2052. .NotSameZone:
  2053.  
  2054.  
  2055.  rts
  2056.  
  2057. ItsAKey:
  2058.  
  2059.  clr.b worry(a0)
  2060.  
  2061.  move.b PLR1_StoodInTop,d0
  2062.  move.b ObjInTop(a0),d1
  2063.  eor.b d1,d0
  2064.  bne .NotSameZone
  2065.  
  2066.  move.w PLR1_xoff,oldx
  2067.  move.w PLR1_zoff,oldz
  2068.  move.w PLR1_Zone,d7
  2069.  move.w 12(a0),d0
  2070.  move.l ZoneAdds,a1
  2071.  move.l (a1,d0.w*4),a1
  2072.  add.l LEVELDATA,a1
  2073.  move.l 2(a1),d0
  2074.  asr.l #7,d0
  2075.  sub.w #16,d0
  2076.  move.w d0,4(a0)
  2077.  cmp.w 12(a0),d7
  2078.  bne .NotSameZone
  2079.  move.w (a0),d0
  2080.  move.l ObjectPoints,a1
  2081.  move.w (a1,d0.w*8),newx
  2082.  move.w 4(a1,d0.w*8),newz
  2083.  move.l #100*100,d2
  2084.  bsr CheckHit
  2085.  tst.b hitwall
  2086.  beq .NotPickedUp
  2087.  
  2088.  move.w #0,Noisex
  2089.  move.w #0,Noisez
  2090.  move.w #50,Noisevol
  2091.  move.w #4,Samplenum
  2092.  move.b #2,chanpick
  2093.  clr.b notifplaying
  2094.  move.b 1(a0),IDNUM
  2095.  movem.l a0/a1/d2/d6/d7,-(a7)
  2096.  jsr MakeSomeNoise
  2097.  movem.l (a7)+,a0/a1/d2/d6/d7
  2098.  
  2099.  move.w #-1,12(a0)
  2100.  move.b 17(a0),d0
  2101.  or.b d0,Conditions+1
  2102.  
  2103.  move.l #PanelKeys,a1
  2104.  move.l #Panel+40*8*11+22,a2
  2105.  
  2106.  moveq #0,d1
  2107.  lsr.b #1,d0
  2108.  bcs.s .done
  2109.  addq #1,d1
  2110.  lsr.b #1,d0
  2111.  bcs.s .done
  2112.  addq #1,d1
  2113.  lsr.b #1,d0
  2114.  bcs.s .done
  2115.  addq #1,d1 
  2116. .done
  2117.  
  2118.  muls #6*22*8,d1
  2119.  
  2120.  adda.w d1,a1
  2121.  
  2122.  move.w #22*8-1,d0    ;lines
  2123. .lines:
  2124.  
  2125.  move.l (a1)+,d1
  2126.  or.l d1,(a2)
  2127.  move.w (a1)+,d1
  2128.  or.w d1,4(a2)
  2129.  adda.w #40,a2
  2130.  
  2131.  dbra d0,.lines
  2132.  
  2133.  
  2134. .NotPickedUp:
  2135.  
  2136. .NotSameZone:
  2137.  
  2138.  rts
  2139.  
  2140. Conditions: dc.l 0
  2141.  
  2142. ; Format of animations:
  2143. ; Size (-1 = and of anim) (w)
  2144. ; Address of Frame. (l)
  2145. ; height offset (w)
  2146.  
  2147. Bul1Anim:
  2148.  dc.w 30*256+30
  2149.  dc.w 1,2
  2150.  dc.w 0
  2151.  dc.w 30*256+30
  2152.  dc.w 1,17
  2153.  dc.w 0
  2154.  dc.w 30*256+30
  2155.  dc.w 1,18
  2156.  dc.w 0
  2157.  dc.w 30*256+30
  2158.  dc.w 1,19
  2159.  dc.w 0
  2160.  dc.l -1
  2161.  
  2162. Bul1Pop
  2163.  dc.b 25,25
  2164.  dc.w 1,6
  2165.  dc.w 0
  2166.  dc.b 25,25
  2167.  dc.w 1,7
  2168.  dc.w -4
  2169.  dc.b 25,25
  2170.  dc.w 1,8
  2171.  dc.w -4
  2172.  dc.b 25,25
  2173.  dc.w 1,9
  2174.  dc.w -4
  2175.  dc.b 25,25
  2176.  dc.w 1,10
  2177.  dc.w -4
  2178.  dc.b 25,25
  2179.  dc.w 1,11
  2180.  dc.w -4
  2181.  dc.b 25,25
  2182.  dc.w 1,12
  2183.  dc.w -4
  2184.  dc.b 25,25
  2185.  dc.w 1,13
  2186.  dc.w -4
  2187.  dc.b 25,25
  2188.  dc.w 1,14
  2189.  dc.w -4
  2190.  dc.b 25,25
  2191.  dc.w 1,15
  2192.  dc.w -4
  2193.  dc.b 25,25
  2194.  dc.w 1,16
  2195.  dc.w -4
  2196.  dc.l -1
  2197.  
  2198. Bul3Anim:
  2199.  dc.b 25,25
  2200.  dc.w 0,12
  2201.  dc.w 0
  2202.  dc.b 25,25
  2203.  dc.w 0,13
  2204.  dc.w 0
  2205.  dc.b 25,25
  2206.  dc.w 0,14
  2207.  dc.w 0
  2208.  dc.b 25,25
  2209.  dc.w 0,15
  2210.  dc.w 0
  2211.  dc.l -1
  2212.  
  2213. Bul3Pop:
  2214.  dc.l -1
  2215.  
  2216. Bul2Anim:
  2217.  dc.b 25,25
  2218.  dc.w 2,0
  2219.  dc.w 0
  2220.  dc.b 25,25
  2221.  dc.w 2,1
  2222.  dc.w 0
  2223.  dc.b 25,25
  2224.  dc.w 2,2
  2225.  dc.w 0
  2226.  dc.b 25,25
  2227.  dc.w 2,3
  2228.  dc.w 0
  2229.  dc.b 25,25
  2230.  dc.w 2,4
  2231.  dc.w 0
  2232.  dc.b 25,25
  2233.  dc.w 2,5
  2234.  dc.w 0
  2235.  dc.b 25,25
  2236.  dc.w 2,6
  2237.  dc.w 0
  2238.  dc.b 25,25
  2239.  dc.w 2,7
  2240.  dc.w 0
  2241.  dc.w -1
  2242.  
  2243.  
  2244. Bul2Pop:
  2245.  dc.b 25,25
  2246.  dc.w 2,8
  2247.  dc.w -4
  2248.  dc.b 29,29
  2249.  dc.w 2,9
  2250.  dc.w -4
  2251.  dc.b 33,33
  2252.  dc.w 2,10
  2253.  dc.w -4
  2254.  dc.b 37,37
  2255.  dc.w 2,11
  2256.  dc.w -4
  2257.  dc.b 41,41
  2258.  dc.w 2,12
  2259.  dc.w -4
  2260.  dc.b 45,45
  2261.  dc.w 2,13
  2262.  dc.w -4
  2263.  dc.b 49,49
  2264.  dc.w 2,14
  2265.  dc.w -4
  2266.  dc.b 53,53
  2267.  dc.w 2,15
  2268.  dc.w -4
  2269.  dc.b 57,57
  2270.  dc.w 2,16
  2271.  dc.w -4
  2272.  dc.b 61,61
  2273.  dc.w 2,17
  2274.  dc.w -4
  2275.  dc.b 65,65
  2276.  dc.w 2,18
  2277.  dc.w -4
  2278.  dc.b 69,69
  2279.  dc.w 2,19
  2280.  dc.w -4
  2281.  dc.w -1
  2282.  
  2283. RockAnim:
  2284.  dc.b 16,16
  2285.  dc.w 6,0
  2286.  dc.w 0
  2287.  dc.b 16,16
  2288.  dc.w 6,1
  2289.  dc.w 0
  2290.  dc.b 16,16
  2291.  dc.w 6,2
  2292.  dc.w 0
  2293.  dc.b 16,16
  2294.  dc.w 6,3
  2295.  dc.w 0  
  2296.  dc.l -1
  2297.  
  2298. RockPop:
  2299.  dc.b 64,64
  2300.  dc.w 8,0+8
  2301.  dc.w 0
  2302.  dc.b 72,72
  2303.  dc.w 8,1+8
  2304.  dc.w 0
  2305.  dc.b 80,80
  2306.  dc.w 8,2+8
  2307.  dc.w 0
  2308.  dc.b 88,88
  2309.  dc.w 8,3+8
  2310.  dc.w 0
  2311.  dc.b 96,96
  2312.  dc.w 8,4+8
  2313.  dc.w 0
  2314.  dc.b 104,104
  2315.  dc.w 8,5+8
  2316.  dc.w 0
  2317.  dc.b 112,112
  2318.  dc.w 8,6+8
  2319.  dc.w 0
  2320.  dc.b 120,120
  2321.  dc.w 8,7+8
  2322.  dc.w 0
  2323.  dc.b 120,120
  2324.  dc.w 8,8+8
  2325.  dc.w 0
  2326.  dc.b 120,120
  2327.  dc.w 8,9+8
  2328.  dc.w 0
  2329.  dc.b 120,120
  2330.  dc.w 8,10+8
  2331.  dc.w 0
  2332.  dc.b 120,120
  2333.  dc.w 8,11+8
  2334.  dc.w 0
  2335.  dc.l -1
  2336.  
  2337. FlameAnim:
  2338. val SET 5
  2339.  REPT 6
  2340.  dc.b val,val
  2341.  dc.w 1,2
  2342.  dc.w 0
  2343.  dc.b val+3,val+3
  2344.  dc.w 1,17
  2345.  dc.w 0
  2346.  dc.b val+6,val+6
  2347.  dc.w 1,18
  2348.  dc.w 0
  2349.  dc.b val+9,val+9
  2350.  dc.w 1,19
  2351.  dc.w 0
  2352. val SET val+12
  2353.  ENDR
  2354.  dc.l -1
  2355.  
  2356. FlamePop:
  2357.  dc.b 40,40
  2358.  dc.w 1,12
  2359.  dc.w -8
  2360.  dc.b 40,40
  2361.  dc.w 1,13
  2362.  dc.w -8
  2363.  dc.b 40,40
  2364.  dc.w 1,14
  2365.  dc.w -8
  2366.  dc.b 40,40
  2367.  dc.w 1,15
  2368.  dc.w -8
  2369.  dc.b 40,40
  2370.  dc.w 1,16
  2371.  dc.w -8
  2372.  dc.l -1
  2373.  
  2374. Explode1Anim: 
  2375.  dc.b 25,25
  2376.  dc.w 0,16
  2377.  dc.w 0
  2378.  dc.b 25,25
  2379.  dc.w 0,17
  2380.  dc.w 0
  2381.  dc.b 25,25
  2382.  dc.w 0,18
  2383.  dc.w 0
  2384.  dc.b 25,25
  2385.  dc.w 0,19
  2386.  dc.w 0
  2387.  dc.l -1
  2388.  
  2389. Explode1Pop:
  2390.  dc.b 20,20
  2391.  dc.w 0,16
  2392.  dc.w 1
  2393.  dc.b 20,20
  2394.  dc.w 0,16
  2395.  dc.w 1
  2396.  dc.b 20,20
  2397.  dc.w 0,16
  2398.  dc.w 1
  2399.  dc.b 20,20
  2400.  dc.w 0,16
  2401.  dc.w 1
  2402.  dc.b 20,20
  2403.  dc.w 0,16
  2404.  dc.w 1
  2405.  dc.b 20,20
  2406.  dc.w 0,16
  2407.  dc.w 1
  2408.  dc.b 20,20
  2409.  dc.w 0,16
  2410.  dc.w 1
  2411.  dc.b 20,20
  2412.  dc.w 0,16
  2413.  dc.w 1
  2414.  
  2415.  dc.b 17,17
  2416.  dc.w 0,16
  2417.  dc.w 1
  2418.  
  2419.  dc.b 13,13
  2420.  dc.w 0,16
  2421.  dc.w 1
  2422.  
  2423.  dc.b 9,9
  2424.  dc.w 0,16
  2425.  dc.w 1
  2426.  
  2427.  dc.l -1
  2428.  
  2429. Explode2Anim: 
  2430.  dc.b 20,20
  2431.  dc.w 0,20
  2432.  dc.w 0
  2433.  dc.b 20,20
  2434.  dc.w 0,21
  2435.  dc.w 0
  2436.  dc.b 20,20
  2437.  dc.w 0,22
  2438.  dc.w 0
  2439.  dc.b 20,20
  2440.  dc.w 0,23
  2441.  dc.w 0
  2442.  dc.l -1
  2443.  
  2444. Explode2Pop:
  2445.  dc.b 20,20
  2446.  dc.w 0,20
  2447.  dc.w 1
  2448.  dc.b 20,20
  2449.  dc.w 0,20
  2450.  dc.w 1
  2451.  dc.b 20,20
  2452.  dc.w 0,20
  2453.  dc.w 1
  2454.  dc.b 20,20
  2455.  dc.w 0,20
  2456.  dc.w 1
  2457.  dc.b 20,20
  2458.  dc.w 0,20
  2459.  dc.w 1
  2460.  dc.b 20,20
  2461.  dc.w 0,20
  2462.  dc.w 1
  2463.  dc.b 20,20
  2464.  dc.w 0,20
  2465.  dc.w 1
  2466.  dc.b 20,20
  2467.  dc.w 0,20
  2468.  dc.w 1
  2469.  
  2470.  dc.b 17,17
  2471.  dc.w 0,20
  2472.  dc.w 1
  2473.  
  2474.  dc.b 13,13
  2475.  dc.w 0,20
  2476.  dc.w 1
  2477.  
  2478.  dc.b 9,9
  2479.  dc.w 0,20
  2480.  dc.w 1
  2481.  
  2482.  dc.l -1
  2483.  
  2484.  
  2485. Explode3Anim: 
  2486.  dc.b 20,20
  2487.  dc.w 0,24
  2488.  dc.w 0
  2489.  dc.b 20,20
  2490.  dc.w 0,25
  2491.  dc.w 0
  2492.  dc.b 20,20
  2493.  dc.w 0,26
  2494.  dc.w 0
  2495.  dc.b 20,20
  2496.  dc.w 0,27
  2497.  dc.w 0
  2498.  dc.l -1
  2499.  
  2500. Explode3Pop:
  2501.  
  2502.  dc.b 17,17
  2503.  dc.w 0,24
  2504.  dc.w 1
  2505.  dc.b 17,17
  2506.  dc.w 0,24
  2507.  dc.w 1
  2508.  dc.b 17,17
  2509.  dc.w 0,24
  2510.  dc.w 1
  2511.  dc.b 17,17
  2512.  dc.w 0,24
  2513.  dc.w 1
  2514.  dc.b 17,17
  2515.  dc.w 0,24
  2516.  dc.w 1
  2517.  dc.b 17,17
  2518.  dc.w 0,24
  2519.  dc.w 1
  2520.  dc.b 17,17
  2521.  dc.w 0,24
  2522.  dc.w 1
  2523.  dc.b 17,17
  2524.  dc.w 0,24
  2525.  dc.w 1
  2526.  
  2527.  dc.b 13,13
  2528.  dc.w 0,24
  2529.  dc.w 1
  2530.  
  2531.  dc.b 9,9
  2532.  dc.w 0,24
  2533.  dc.w 1
  2534.  
  2535.   dc.l -1
  2536.  
  2537. Explode4Anim: 
  2538.  dc.b 30,30
  2539.  dc.w 0,28
  2540.  dc.w 0
  2541.  dc.b 30,30
  2542.  dc.w 0,29
  2543.  dc.w 0
  2544.  dc.b 30,30
  2545.  dc.w 0,30
  2546.  dc.w 0
  2547.  dc.b 30,30
  2548.  dc.w 0,31
  2549.  dc.w 0
  2550.  dc.l -1
  2551.  
  2552. Explode4Pop:
  2553.  
  2554.  dc.b 20,20
  2555.  dc.w 0,28
  2556.  dc.w 0
  2557.  dc.b 20,20
  2558.  dc.w 0,28
  2559.  dc.w 1
  2560.  dc.b 20,20
  2561.  dc.w 0,28
  2562.  dc.w 1
  2563.  dc.b 20,20
  2564.  dc.w 0,28
  2565.  dc.w 1
  2566.  dc.b 20,20
  2567.  dc.w 0,28
  2568.  dc.w 1
  2569.  dc.b 20,20
  2570.  dc.w 0,28
  2571.  dc.w 1
  2572.  dc.b 20,20
  2573.  dc.w 0,28
  2574.  dc.w 1
  2575.  dc.b 20,20
  2576.  dc.w 0,28
  2577.  dc.w 1
  2578.  
  2579.  dc.b 17,17
  2580.  dc.w 0,28
  2581.  dc.w 1
  2582.  
  2583.  dc.b 13,13
  2584.  dc.w 0,28
  2585.  dc.w 1
  2586.  
  2587.  dc.b 9,9
  2588.  dc.w 0,28
  2589.  dc.w 1
  2590.  
  2591.  dc.l -1
  2592.   
  2593. BulletSizes:
  2594.  dc.w $808
  2595.  dc.w $1010
  2596.  dc.w $1010
  2597.  dc.w $0808
  2598.  dc.w $0808
  2599.  dc.w 0,0,0,0,0
  2600. ;10 
  2601.  dc.w 0,0,0,0,0,0,0,0,0,0
  2602. ;20
  2603.  dc.w 0,0,0,0,0,0,0,0,0,0
  2604. ;30
  2605.  dc.w 0,0,0,0,0,0,0,0,0,0
  2606. ;40
  2607.  dc.w 0,0,0,0,0,0,0,0,0,0
  2608. ;50
  2609.  dc.w $0808,$0808,$0808,$0808
  2610.  
  2611. HitNoises:
  2612.  dc.l -1,-1
  2613.  dc.w 15,200
  2614.  dc.l -1,-1,-1,-1,-1,-1,-1
  2615.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2616.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2617.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2618.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2619.  
  2620.  dc.w 13,50,13,50,13,50,13,50
  2621.  
  2622. ExplosiveForce:
  2623.  dc.w 0,0,200,0,100,0,0,0,0,0
  2624.  dc.w 0,0,0,0,0,0,0,0,0,0
  2625.  dc.w 0,0,0,0,0,0,0,0,0,0
  2626.  dc.w 0,0,0,0,0,0,0,0,0,0
  2627.  dc.w 0,0,0,0,0,0,0,0,0,0
  2628.  dc.w 0,0,0,0
  2629.   
  2630. BulletTypes:
  2631.  dc.l Bul1Anim,Bul1Pop
  2632.  dc.l Bul2Anim,Bul2Pop
  2633.  dc.l RockAnim,RockPop
  2634.  dc.l FlameAnim,FlamePop
  2635.  dc.l Bul1Anim,Bul1Pop
  2636.  dc.l 0,0
  2637.  dc.l 0,0
  2638.  dc.l 0,0
  2639.  dc.l 0,0
  2640.  dc.l 0,0
  2641.  
  2642.  dc.l 0,0
  2643.  dc.l 0,0
  2644.  dc.l 0,0
  2645.  dc.l 0,0
  2646.  dc.l 0,0
  2647.  dc.l 0,0
  2648.  dc.l 0,0
  2649.  dc.l 0,0
  2650.  dc.l 0,0
  2651.  dc.l 0,0
  2652.  
  2653.  dc.l 0,0
  2654.  dc.l 0,0
  2655.  dc.l 0,0
  2656.  dc.l 0,0
  2657.  dc.l 0,0
  2658.  dc.l 0,0
  2659.  dc.l 0,0
  2660.  dc.l 0,0
  2661.  dc.l 0,0
  2662.  dc.l 0,0
  2663.  
  2664.  dc.l 0,0
  2665.  dc.l 0,0
  2666.  dc.l 0,0
  2667.  dc.l 0,0
  2668.  dc.l 0,0
  2669.  dc.l 0,0
  2670.  dc.l 0,0
  2671.  dc.l 0,0
  2672.  dc.l 0,0
  2673.  dc.l 0,0
  2674.  
  2675.  dc.l 0,0
  2676.  dc.l 0,0
  2677.  dc.l 0,0
  2678.  dc.l 0,0
  2679.  dc.l 0,0
  2680.  dc.l 0,0
  2681.  dc.l 0,0
  2682.  dc.l 0,0
  2683.  dc.l 0,0
  2684.  dc.l 0,0
  2685.  
  2686.  dc.l Explode1Anim,Explode1Pop
  2687.  dc.l Explode2Anim,Explode2Pop
  2688.  dc.l Explode3Anim,Explode3Pop
  2689.  dc.l Explode4Anim,Explode4Pop
  2690.  
  2691. tsta: dc.l 0
  2692. timeout: dc.w 0
  2693.  
  2694. ItsABullet:
  2695.  
  2696.  move.b #0,timeout
  2697.  move.w 12(a0),d0
  2698.  blt doneshot
  2699.  
  2700.  tst.b shotstatus(a0)
  2701.  bne.s noworrylife
  2702.  
  2703.  moveq #0,d1
  2704.  move.w shotlife(a0),d2
  2705.  blt.s infinite
  2706.  move.b shotsize(a0),d1
  2707.  move.l GunData,a1
  2708.  lsl.w #2,d1
  2709.  move.w 10(a1,d1.w*8),d1
  2710.  blt.s infinite
  2711.  
  2712.  cmp.w d2,d1
  2713.  bge.s notdone
  2714.  
  2715.  st timeout
  2716.  bra.s infinite 
  2717.  
  2718. notdone:
  2719.  
  2720.  move.w TempFrames,d2
  2721.  add.w d2,shotlife(a0)
  2722.  
  2723. infinite:
  2724.  
  2725. noworrylife:
  2726.  
  2727.  move.w #0,extlen
  2728.  move.b #$ff,awayfromwall
  2729.  
  2730.  moveq #0,d1
  2731.  move.b shotsize(a0),d1
  2732.  move.l #BulletSizes,a1
  2733.  move.w (a1,d1.w*2),14(a0)
  2734.  move.l #BulletTypes,a1
  2735.  lea (a1,d1.w*8),a1 
  2736.  moveq #0,d1
  2737.  move.b shotanim(a0),d1
  2738.  
  2739.  tst.b shotstatus(a0)
  2740.  beq.s notpopping
  2741.  
  2742.  move.l 4(a1),a2
  2743.  move.w (a2,d1.w*8),d2
  2744.  bge.s notdonepopping
  2745.  move.w #-1,12(a0)
  2746.  clr.b shotstatus(a0)
  2747.  move.b #0,shotanim(a0)
  2748.  rts
  2749. notdonepopping:
  2750.  
  2751.  add.b #1,shotanim(a0)
  2752.  move.w d2,6(a0)
  2753.  move.l 2(a2,d1.w*8),8(a0)
  2754.  move.w 6(a2,d1.w*8),d3
  2755.  add.w d3,4(a0)
  2756.  ext.l d3
  2757.  asl.l #7,d3
  2758.  add.l d3,accypos(a0)
  2759.  rts
  2760.  
  2761. notpopping:
  2762.  
  2763.  move.l (a1),a2
  2764.  add.b #1,shotanim(a0)
  2765.  move.w (a2,d1.w*8),d2
  2766.  bge.s notdoneanim
  2767.  
  2768.  move.b #0,shotanim(a0)
  2769.  move.w #0,d1
  2770.  
  2771. notdoneanim:
  2772.  
  2773.  move.w (a2,d1.w*8),6(a0)
  2774.  move.l 2(a2,d1.w*8),8(a0)
  2775.  move.w 6(a2,d1.w*8),d3
  2776.  ext.l d3
  2777.  asl.l #7,d3
  2778.  add.l d3,accypos(a0)
  2779.  
  2780.  
  2781.  move.l ObjectPoints,a1
  2782.  move.w (a0),d1
  2783.  lea (a1,d1.w*8),a1
  2784.  move.l (a1),d2
  2785.  move.l d2,oldx
  2786.  move.l shotxvel(a0),d3
  2787.  move.w d3,d4
  2788.  swap d3
  2789.  move.w TempFrames(pc),d5
  2790.  muls d5,d3
  2791.  mulu d5,d4
  2792.  swap d3
  2793.  clr.w d3
  2794.  add.l d4,d3
  2795.  add.l d3,d2
  2796.  move.l d2,newx
  2797.  move.l 4(a1),d2
  2798.  move.l d2,oldz
  2799.  move.l shotzvel(a0),d3
  2800.  move.w d3,d4
  2801.  swap d3
  2802.  muls d5,d3
  2803.  mulu d5,d4
  2804.  swap d3
  2805.  clr.w d3
  2806.  add.l d4,d3
  2807.  add.l d3,d2
  2808.  move.l d2,newz
  2809.  move.l accypos(a0),oldy 
  2810.  
  2811.  move.w shotyvel(a0),d3
  2812.  muls TempFrames,d3
  2813.  move.w shotgrav(a0),d5
  2814.  beq.s nograv
  2815.  muls TempFrames,d5
  2816.  add.l d5,d3
  2817.  move.w shotyvel(a0),d6
  2818.  ext.l d6
  2819.  add.l d5,d6
  2820.  cmp.l #10*256,d6
  2821.  blt.s okgrav
  2822.  move.l #10*256,d6
  2823.  okgrav:
  2824.  move.w d6,shotyvel(a0)
  2825. nograv:
  2826.  move.l accypos(a0),d4 
  2827.  add.l d3,d4
  2828.  
  2829.  move.l d4,accypos(a0)
  2830.  move.l d4,newy
  2831.  asr.l #7,d4
  2832.  move.w d4,4(a0)
  2833.  
  2834.  
  2835.  move.l ZoneAdds,a2
  2836.  move.l (a2,d0.w*4),d0
  2837.  add.l LEVELDATA,d0
  2838.  move.l d0,objroom
  2839.  move.b ObjInTop(a0),StoodInTop
  2840.  move.w #%0000010000000000,wallflags
  2841.  move.l #0,StepUpVal
  2842.  move.l #$1000000,StepDownVal
  2843.  move.l #10*128,thingheight
  2844.  movem.l d0/d7/a0/a1/a2/a4/a5,-(a7)
  2845.  jsr MoveObject
  2846.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5
  2847.  move.b StoodInTop,ObjInTop(a0)
  2848.   
  2849.  tst.b hitwall
  2850.  beq .nothitwall
  2851.  
  2852.  move.l wallhitheight,d4
  2853.  move.l d4,accypos(a0)
  2854.  asr.l #7,d4
  2855.  move.w d4,4(a0)
  2856.  
  2857. .hitsomething
  2858.  clr.b timeout
  2859.  move.b #0,shotanim(a0)
  2860.  move.b #1,shotstatus(a0)
  2861.  
  2862.  movem.l d0-d7/a0-a6,-(a7)
  2863.  move.l #HitNoises,a2
  2864.  moveq #0,d0
  2865.  move.b shotsize(a0),d0
  2866.  move.l (a2,d0.w*4),d0
  2867.  blt.s .nohitnoise
  2868.  
  2869.  move.l #ObjRotated,a1
  2870.  move.w (a0),d1
  2871.  move.l (a1,d1.w*8),Noisex
  2872.  move.w d0,Noisevol
  2873.  swap d0
  2874.  move.w d0,Samplenum
  2875.  move.b d1,IDNUM
  2876.  jsr MakeSomeNoise
  2877.  
  2878. .nohitnoise:
  2879.  
  2880.  moveq #0,d0
  2881.  move.l #ExplosiveForce,a2
  2882.  move.b shotsize(a0),d0
  2883.  move.w (a2,d0.w*2),d0
  2884.  beq.s .noexplosion
  2885.  
  2886.  move.w newx,Viewerx
  2887.  move.w newz,Viewerz
  2888.  bsr ComputeBlast
  2889.  
  2890. .noexplosion:
  2891.  
  2892.  movem.l (a7)+,d0-d7/a0-a6
  2893.  
  2894. ; bra doneshot
  2895.  
  2896. ; rts
  2897.  
  2898. .nothitwall:
  2899.  
  2900.  tst.b timeout
  2901.  bne .hitsomething
  2902.  
  2903. lab:
  2904.  
  2905.  move.l objroom,a3
  2906.  
  2907.  tst.b ObjInTop(a0)
  2908.  beq.s .notintop
  2909.  adda.w #8,a3
  2910. .notintop:
  2911.  
  2912.  move.l 6(a3),d0
  2913.  cmp.l accypos(a0),d0
  2914.  blt .nohitroof 
  2915.  
  2916.  btst #0,shotflags+1(a0)
  2917.  beq.s .nobounce
  2918.  
  2919.  neg.w shotyvel(a0)
  2920.  bra.s .nohitroof
  2921.  
  2922. .nobounce: 
  2923.  
  2924.  move.b #0,shotanim(a0)
  2925.  move.b #1,shotstatus(a0)
  2926.  
  2927.  movem.l d0-d7/a0-a6,-(a7)
  2928.  move.l #HitNoises,a2
  2929.  moveq #0,d0
  2930.  move.b shotsize(a0),d0
  2931.  move.l (a2,d0.w*4),d0
  2932.  blt.s .nohitnoise
  2933.  
  2934.  move.l #ObjRotated,a1
  2935.  move.w (a0),d1
  2936.  move.l (a1,d1.w*8),Noisex
  2937.  move.w d0,Noisevol
  2938.  swap d0
  2939.  move.w d0,Samplenum
  2940.  move.b d1,IDNUM
  2941.  jsr MakeSomeNoise
  2942.  
  2943. .nohitnoise:
  2944.  
  2945.  moveq #0,d0
  2946.  move.l #ExplosiveForce,a2
  2947.  move.b shotsize(a0),d0
  2948.  move.w (a2,d0.w*2),d0
  2949.  beq.s .noexplosion
  2950.  
  2951.  move.w newx,Viewerx
  2952.  move.w newz,Viewerz
  2953.  bsr ComputeBlast
  2954.  
  2955. .noexplosion:
  2956.  
  2957.  movem.l (a7)+,d0-d7/a0-a6
  2958.  
  2959. .nohitroof:
  2960.  move.l 2(a3),d0
  2961.  sub.l accypos(a0),d0
  2962.  cmp.l #5*128,d0
  2963.  bgt .nohitfloor 
  2964.  
  2965.  btst #0,shotflags+1(a0)
  2966.  beq.s .nobounceup
  2967.  
  2968.  tst.w shotyvel(a0)
  2969.  blt .nohitfloor
  2970.  
  2971.  moveq #0,d0
  2972.  move.w shotyvel(a0),d0
  2973.  asr.w #1,d0
  2974.  neg.w d0
  2975.  move.w d0,shotyvel(a0)
  2976.  bra.s .nohitfloor
  2977. .nobounceup: 
  2978.  
  2979.  
  2980.  move.b #0,shotanim(a0)
  2981.  move.b #1,shotstatus(a0)
  2982.  movem.l d0-d7/a0-a6,-(a7)
  2983.  move.l #HitNoises,a2
  2984.  moveq #0,d0
  2985.  move.b shotsize(a0),d0
  2986.  move.l (a2,d0.w*4),d0
  2987.  blt.s .nohitnoise2
  2988.  
  2989.  move.l #ObjRotated,a1
  2990.  move.w (a0),d1
  2991.  move.l (a1,d1.w*8),Noisex
  2992.  move.w d0,Noisevol
  2993.  swap d0
  2994.  move.w d0,Samplenum
  2995.  move.b d1,IDNUM
  2996.  jsr MakeSomeNoise
  2997. .nohitnoise2:
  2998.  moveq #0,d0
  2999.  move.l #ExplosiveForce,a2
  3000.  move.b shotsize(a0),d0
  3001.  move.w (a2,d0.w*2),d0
  3002.  beq.s .noexplosion2
  3003.  
  3004.  move.w newx,Viewerx
  3005.  move.w newz,Viewerz
  3006.  bsr ComputeBlast
  3007.  
  3008. .noexplosion2:
  3009.  movem.l (a7)+,d0-d7/a0-a6
  3010. .nohitfloor:
  3011.  
  3012.  move.l objroom,a3
  3013.  move.w (a3),12(a0)
  3014.  move.l newx,(a1)
  3015.  move.l newz,4(a1)
  3016. ************ 
  3017. * Check if hit a nasty
  3018.  
  3019.  tst.l EnemyFlags(a0)
  3020.  bne.s notasplut
  3021.  rts
  3022. notasplut:
  3023.  
  3024.  move.l ObjectData,a3
  3025.  move.l ObjectPoints,a1
  3026.  move.w newx,d2
  3027.  sub.w oldx,d2
  3028.  move.w d2,xdiff
  3029.  move.w newz,d1
  3030.  sub.w oldz,d1
  3031.  move.w d1,zdiff
  3032.  move.w d1,d3
  3033.  move.w d2,d4
  3034.  muls d2,d2
  3035.  muls d1,d1
  3036.  add.l d1,d2
  3037.  beq .oksqr
  3038.  
  3039.  move.w #31,d0
  3040. .findhigh
  3041.  btst d0,d2
  3042.  bne .foundhigh
  3043.  dbra d0,.findhigh
  3044. .foundhigh
  3045.  asr.w #1,d0
  3046.  clr.l d3
  3047.  bset d0,d3
  3048.  move.l d3,d0
  3049.  
  3050.  move.w d0,d1
  3051.  muls d1,d1    ; x*x
  3052.  sub.l d2,d1    ; x*x-a
  3053.  asr.l #1,d1    ; (x*x-a)/2
  3054.  divs d0,d1    ; (x*x-a)/2x
  3055.  sub.w d1,d0    ; second approx
  3056.  bgt .stillnot0
  3057.  move.w #1,d0
  3058. .stillnot0
  3059.  
  3060.  move.w d0,d1
  3061.  muls d1,d1
  3062.  sub.l d2,d1
  3063.  asr.l #1,d1
  3064.  divs d0,d1
  3065.  sub.w d1,d0    ; second approx
  3066.  bgt .stillnot02
  3067.  move.w #1,d0
  3068. .stillnot02
  3069.  
  3070.  move.w d0,d1
  3071.  muls d1,d1
  3072.  sub.l d2,d1
  3073.  asr.l #1,d1
  3074.  divs d0,d1
  3075.  sub.w d1,d0    ; second approx
  3076.  bgt .stillnot03
  3077.  move.w #1,d0
  3078. .stillnot03
  3079.  
  3080. .oksqr
  3081.  move.w d0,Range
  3082.  add.w #40,d0
  3083.  muls d0,d0
  3084.  move.l d0,sqrnum
  3085.  
  3086. .checkloop:
  3087.  tst.w (a3)
  3088.  blt .checkedall
  3089.  tst.w 12(a3)
  3090.  blt .notanasty
  3091.  move.b 16(a3),d1
  3092.  move.l EnemyFlags(a0),d7
  3093.  btst d1,d7
  3094.  beq .notanasty
  3095.  tst.b numlives(a3)
  3096.  beq .notanasty
  3097.  
  3098.  move.w 4(a3),d1
  3099.  move.w 4(a0),d2
  3100.  sub.w d1,d2
  3101.  cmp.w #12+40,d2
  3102.  bgt .notanasty
  3103.  cmp.w #-12-40,d2
  3104.  blt .notanasty
  3105.  
  3106.  
  3107.  move.w (a3),d1
  3108.  move.w (a1,d1.w*8),d2
  3109.  move.w d2,d4
  3110.  move.w 4(a1,d1.w*8),d3
  3111.  move.w d3,d5
  3112.  sub.w newx,d4
  3113.  sub.w oldx,d2
  3114.  move.w d2,d6
  3115.  sub.w newz,d5
  3116.  sub.w oldz,d3
  3117.  move.w d3,d7
  3118.  muls zdiff,d6
  3119.  muls xdiff,d7
  3120.  sub.l d7,d6
  3121.  bgt.s .pos
  3122.  neg.l d6
  3123. .pos:
  3124.  divs Range,d6
  3125.  cmp.w #50,d6
  3126.  bgt .stillgoing
  3127.  
  3128.  muls d2,d2
  3129.  muls d3,d3
  3130.  add.l d3,d2
  3131.  cmp.l sqrnum,d2
  3132.  bgt .stillgoing
  3133.  muls d4,d4
  3134.  muls d5,d5
  3135.  add.l d5,d4
  3136.  cmp.l sqrnum,d4
  3137.  bgt .stillgoing
  3138.  
  3139.  move.b shotpower(a0),d6
  3140.  add.b d6,damagetaken(a3)
  3141.  move.w shotxvel(a0),ImpactX(a3)
  3142.  move.w shotzvel(a0),ImpactZ(a3)
  3143.  move.b #0,shotanim(a0)
  3144.  move.b #1,shotstatus(a0)
  3145.  
  3146.  movem.l d0-d7/a0-a6,-(a7)
  3147.  move.l #HitNoises,a2
  3148.  moveq #0,d0
  3149.  move.b shotsize(a0),d0
  3150.  move.l (a2,d0.w*4),d0
  3151.  blt.s .nohitnoise3
  3152.  
  3153.  move.l #ObjRotated,a1
  3154.  move.w (a0),d1
  3155.  move.l (a1,d1.w*8),Noisex
  3156.  move.w d0,Noisevol
  3157.  swap d0
  3158.  move.w d0,Samplenum
  3159.  move.b d1,IDNUM
  3160.  jsr MakeSomeNoise
  3161. .nohitnoise3:
  3162.  moveq #0,d0
  3163.  move.l #ExplosiveForce,a2
  3164.  move.b shotsize(a0),d0
  3165.  move.w (a2,d0.w*2),d0
  3166.  beq.s .noexplosion3
  3167.  
  3168.  move.w newx,Viewerx
  3169.  move.w newz,Viewerz
  3170.  bsr ComputeBlast
  3171.  
  3172. .noexplosion3:
  3173.  movem.l (a7)+,d0-d7/a0-a6
  3174.  
  3175.  
  3176.  bra .hitnasty
  3177. .stillgoing:
  3178. .notanasty:
  3179.  add.w #64,a3
  3180.  bra .checkloop
  3181. .hitnasty:
  3182. .checkedall
  3183.  
  3184. doneshot:
  3185.  
  3186.  rts
  3187.  
  3188. tmpnewx: dc.l 0
  3189. tmpnewz: dc.l 0
  3190. hithit: dc.l 0
  3191. sqrnum: dc.l 0
  3192. tmpangpos: dc.l 0
  3193.  
  3194. putinbackdrop:
  3195.  
  3196.  move.l a0,-(a7)
  3197.  
  3198.  move.w tmpangpos,d5
  3199.  and.w #8191,d5
  3200.  muls #432,d5
  3201.  divs #8192,d5
  3202.  muls #38*2,d5
  3203.  
  3204.  CACHE_ON d1
  3205.  
  3206.  move.l frompt,a0
  3207.  adda.w #104*4,a0
  3208.  move.l #EndBackPicture,a3
  3209.  lea.l BackPicture,a1
  3210.  add.l d5,a1
  3211.  move.w #2,d4
  3212.  bra allbars
  3213.  cnop 0,32
  3214. allbars:
  3215.  move.w #31,d3
  3216. onebar:
  3217. vertline:    
  3218. val SET 0
  3219.  
  3220.  REPT 19
  3221.  move.l (a1)+,d0
  3222.  move.w d0,val+104*4(a0)
  3223.  swap d0
  3224.  move.w d0,val(a0)
  3225. val SET val+104*8
  3226.  ENDR
  3227.  
  3228.  cmp.l a3,a1
  3229.  blt.s notoffrightend
  3230.  move.l #BackPicture,a1
  3231. notoffrightend:
  3232.  
  3233.  addq #4,a0
  3234.  dbra d3,onebar
  3235.  addq #4,a0
  3236.  dbra d4,allbars
  3237.  
  3238.  move.l (a7)+,a0
  3239.  rts
  3240.  
  3241. ComputeBlast:
  3242.  
  3243.  move.l #%110111100001,d7    ; possible targets
  3244.  
  3245.  move.w d0,d6
  3246.  move.w d0,d1
  3247.  ext.l d6
  3248.  asl.l #4,d6
  3249.  
  3250.  move.w 12(a0),d0
  3251.  neg.w d1
  3252.  asr.w #5,d1
  3253.  bsr Flash
  3254.  move.l ZoneAdds,a2
  3255.  move.l (a2,d0.w*4),a2
  3256.  add.l LEVELDATA,a2
  3257.  move.l a2,FromRoom
  3258.  
  3259.  move.l ObjectData,a2
  3260.  suba.w #64,a2
  3261.  
  3262. HitObjLoop:
  3263.  add.w #64,a2
  3264.  move.w (a2),d0
  3265.  blt CheckedEmAll
  3266.  tst.w 12(a2)
  3267.  blt.s HitObjLoop
  3268.  moveq #0,d1
  3269.  move.b 16(a2),d1
  3270.  btst d1,d7
  3271.  beq.s HitObjLoop
  3272.  
  3273.  move.w 12(a2),d1
  3274.  move.l ZoneAdds,a3
  3275.  move.l (a3,d1.w*4),a3
  3276.  add.l LEVELDATA,a3
  3277.  move.l a3,ToRoom
  3278.  move.l ObjectPoints,a3
  3279.  move.w (a3,d0.w*8),Targetx
  3280.  move.w 4(a3,d0.w*8),Targetz
  3281.  jsr CanItBeSeen
  3282.  tst.b CanSee
  3283.  beq.s HitObjLoop
  3284.  
  3285.  move.w Targetx,d0
  3286.  sub.w Viewerx,d0
  3287.  move.w d0,d2
  3288.  move.w Targetz,d1
  3289.  sub.w Viewerz,d1
  3290.  move.w d1,d3
  3291.  muls d2,d2
  3292.  muls d3,d3
  3293.  add.l d2,d3
  3294.  asr.l #6,d3
  3295.  tst.w d3
  3296.  bne.s OkItsnotzero
  3297.  moveq #1,d3
  3298. OkItsnotzero:
  3299.  
  3300.  cmp.l #32767,d3
  3301.  bgt HitObjLoop
  3302.  
  3303.  move.l d6,d5
  3304.  divs d3,d5
  3305.  cmp.w #50,d5
  3306.  blt.s okdamage
  3307.  move.w #50,d5
  3308. okdamage:
  3309.  add.b d5,damagetaken(a2)
  3310.  ext.l d0
  3311.  asl.l #5,d0
  3312.  ext.l d1
  3313.  asl.l #5,d1
  3314.  divs d3,d0
  3315.  divs d3,d1
  3316.  move.w d0,ImpactX(a2)
  3317.  move.w d1,ImpactZ(a2)
  3318.  
  3319.  bra HitObjLoop 
  3320.  
  3321. CheckedEmAll:
  3322.  rts
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.